4 Jun 2004 10:26
spoiled but acr = 1.
Pawel Jakub Dawidek <pjd <at> FreeBSD.org>
2004-06-04 08:26:59 GMT
2004-06-04 08:26:59 GMT
Hi. While working on geom_mirror and using geom_nop I've found that this is possible to panic geom in this way: We have providers: md0 and md0.nop (attached to md0, but not opened). We load new class (geom_mirror). GEOM gives provider md0 for taste. Class is tasting md0 and opening it with r1w1e1. Provider was opened for writing so all md0's consumers are marked as beeing spoiled (md0.nop -> md0 consumer too) and g_spoil_event is send. Before g_spoil_event can be proceeded we're still in g_new_provider event and the next provider to taste is md0.nop. Class is trying to open md0.nop for reading. Provider md0.nop is trying to open through its consumer (which was marked as beeing spoiled) provider md0 and... panic. I'm not sure how to solve this yet. Maybe before we give provider for taste we should check if any of its consumer is marked as beeing spoiled. But when we should return with taste of this provider? Hmm, or maybe something like this:(Continue reading)
> What if you set debugflags=4, can you see where they went ?
I assume you meant debugflags=2, since that's the bio debuglevel, but I
don't see them there, too.
If I biowait() on them then I can see that BIO_DONE isn't set, so it
will not return.
Anyway, if I let writes go through unconditionally and reject all reads,
then I probably don't have this problem at all.
thanks,
le
RSS Feed