Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 5 Oct 2005 12:10:28 -0400
From:      Jung-uk Kim <jkim@FreeBSD.org>
To:        Peter Edwards <peadar.edwards@gmail.com>
Cc:        freebsd-current@FreeBSD.org
Subject:   Re: biodone panics
Message-ID:  <200510051210.30452.jkim@FreeBSD.org>
In-Reply-To: <34cb7c840510050613u36e76be1pef82c41130da8804@mail.gmail.com>
References:  <34cb7c8405092815247dc89bf6@mail.gmail.com> <200509291303.41181.jhb@FreeBSD.org> <34cb7c840510050613u36e76be1pef82c41130da8804@mail.gmail.com>

next in thread | previous in thread | raw e-mail | index | archive | help
On Wednesday 05 October 2005 09:13 am, Peter Edwards wrote:
> Take 2 for the biodone() panics:
>
> acd_geom_start() implements request limiting by breaking up a large
> request in the passed bio into a sequence of smaller ones.  As each
> request is created,  acd_strategy is invoked to start the IO.
>
> However, I think this IO can complete while still issuing the child
> requests, leading to the parent being retired early. (ie, when a
> child operation completes, it checks if its the last operation to
> complete, and, if so, retires the parent: see g_std_done.)
>
> The attached patch makes my qemu box much more reliable (I could
> crash a qemu hosted system 100% with a "tar fc" of the 6.0-BETA
> bootonly ISO without the patch, and it's gone through many
> iterations fine with it)
>
> Any opinions/testing results welcome.

I think you nailed it!  It's a shame that I had the same theory and I 
was staring at the same code with scratching my head for hours but I 
couldn't find proper fix. :-(  Tested with QEMU 0.7.2 from ports/qemu 
for a while with no regression.

BTW, minor style comment.  Please do s/0/NULL/.

Thanks a bunch!

Jung-uk Kim



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200510051210.30452.jkim>