biodone panics
Jung-uk Kim
jkim at FreeBSD.org
Wed Oct 5 09:10:48 PDT 2005
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
More information about the freebsd-current
mailing list