Date: Tue, 21 Apr 2009 12:28:02 +0200 From: Pawel Jakub Dawidek <pjd@FreeBSD.org> To: Ulf Lilleengen <lulf@FreeBSD.org> Cc: freebsd-geom@FreeBSD.org Subject: Re: kern/133604: [gvinum] [panic] writing to gjournal on a gvinum volume Message-ID: <20090421102802.GC7771@mail.wheel.pl> In-Reply-To: <20090421111559.GA21043@carrot> References: <200904191010.n3JAA6lk068313@freefall.freebsd.org> <20090421093011.GB7771@mail.wheel.pl> <20090421111559.GA21043@carrot>
next in thread | previous in thread | raw e-mail | index | archive | help
On Tue, Apr 21, 2009 at 01:16:00PM +0200, Ulf Lilleengen wrote: > On tir, apr 21, 2009 at 11:30:11am +0200, Pawel Jakub Dawidek wrote: > > The bio_cflags field is for consumer use only (in this case gjournal. As > > provide you should use bio_pflags. > > > Yes, but shouldn't cflags be used for the BIOs that gvinum issue downwards > when it is a consumer? Like this: > > gjournal (consumer) > | > gvinum (provider) > gvinum (consumer) > | > disk (provider) > > I think the problem is that it has to check where the BIO comes from when > picking a BIO from the input queue. In this case, it misinterpreted the > gjournal BIO as an internal DONE bio, so if the originator of the BIO is > known, it can determine if cflags is actually its own. Is this making sense? One never passes received bio down, but instead bio is cloned, modified and passed down, so in your case: gjournal (consumer) | bio1 | gvinum (provider) gvinum (consumer) | bio2 | disk (provider) You can use bio1->bio_pflags and bio2->bio_cflags. If you have the same queue for incoming and completed bios you might be able to find out which is which by checking bio_to/bio_from fields for example. -- Pawel Jakub Dawidek http://www.wheel.pl pjd@FreeBSD.org http://www.FreeBSD.org FreeBSD committer Am I Evil? Yes, I Am!
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20090421102802.GC7771>