From: Lars Ellenberg <Lars.Ellenberg@linbit.com>
To: drbd-dev@lists.linbit.com
Subject: Re: [Drbd-dev] DRBD-8 - next crash in bio_split()
Date: Wed, 13 Sep 2006 22:01:05 +0200 [thread overview]
Message-ID: <20060913200105.GA31250@barkeeper1.linbit> (raw)
In-Reply-To: <342BAC0A5467384983B586A6B0B37671038B0554@EXNA.corp.stratus.com>
/ 2006-09-13 14:15:19 -0400
\ Graham, Simon:
> Yesterday's checkins have allowed me to get past the booting stage and
> I've made some good progress - however, I've started to notice system
> crashes when I failover use of one of the drbd devices from one node to
> the other - always inside bio_split() at an assert that there is a
> single bio_vec in the array (bio->bi_vcnt==1).
>
> I see that there has been some discussion of this previously
> (http://lists.linbit.com/pipermail/drbd-dev/2005-March/000272.html) so
> we are all aware that bio_split can only handle a bio with a single
> bio_vec -- part of the mega-reorg of request processing was this change:
>
> #if 1
> /* to make some things easier, force allignment of requests
> within the
> * granularity of our hash tables */
> s_enr = bio->bi_sector >> HT_SHIFT;
> e_enr = (bio->bi_sector+(bio->bi_size>>9)-1) >> HT_SHIFT;
> #else
> /* when not using two primaries (and not being as paranoid as
> lge),
> * actually there is no need to be as strict.
> * only force allignment within AL_EXTENT boundaries */
> s_enr = bio->bi_sector >> (AL_EXTENT_SIZE_B-9);
> e_enr = (bio->bi_sector+(bio->bi_size>>9)-1) >>
> (AL_EXTENT_SIZE_B-9);
> #endif
>
> Since HT_SHIFT is 9 and AL_EXTENT_SIZE_B-9 is 13, this means we are far
> more likely to decide to split now and maybe it is happening where the
> bi_io_vec array has more than one entry...
would that do the trick?
both sections should probably be run-time conditional on
"two_primaries", but they have to be consistent, at least...
Index: drbd_req.c
===================================================================
--- drbd_req.c (revision 2415)
+++ drbd_req.c (working copy)
@@ -1068,7 +1068,11 @@
unsigned int bio_size = bio->bi_size;
int max;
+#if 1
+ max = DRBD_MAX_SEGMENT_SIZE - ((bio_offset & (DRBD_MAX_SEGMENT_SIZE-1)) + bio_size);
+#else
max = AL_EXTENT_SIZE - ((bio_offset & (AL_EXTENT_SIZE-1)) + bio_size);
+#endif
if (max < 0) max = 0;
if (max <= bvec->bv_len && bio_size == 0)
return bvec->bv_len;
--
: Lars Ellenberg Tel +43-1-8178292-55 :
: LINBIT Information Technologies GmbH Fax +43-1-8178292-82 :
: Schoenbrunner Str. 244, A-1120 Vienna/Europe http://www.linbit.com :
next prev parent reply other threads:[~2006-09-13 20:01 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2006-09-13 18:15 [Drbd-dev] DRBD-8 - next crash in bio_split() Graham, Simon
2006-09-13 20:01 ` Lars Ellenberg [this message]
-- strict thread matches above, loose matches on Subject: below --
2006-09-13 20:41 Graham, Simon
2006-09-13 21:51 ` Lars Ellenberg
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20060913200105.GA31250@barkeeper1.linbit \
--to=lars.ellenberg@linbit.com \
--cc=drbd-dev@lists.linbit.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox