- Assert that the bufobj matches in flushbuflists. I still haven't gotten
to root cause on exactly how this happens. - If the assert is disabled, we presently try to handle this case, but the BUF_UNLOCK was missing. Thus, if this condition ever hit we would leak a buf lock. Many thanks to Peter Holm for all his help in finding this bug. He really put more effort into it than I did.
This commit is contained in:
parent
3e09e80261
commit
60d07eec30
@ -1040,7 +1040,10 @@ flushbuflist(bufv, flags, bo, slpflag, slptimeo)
|
|||||||
BO_LOCK(bo);
|
BO_LOCK(bo);
|
||||||
return (error != ENOLCK ? error : EAGAIN);
|
return (error != ENOLCK ? error : EAGAIN);
|
||||||
}
|
}
|
||||||
|
KASSERT(bp->b_bufobj == bo,
|
||||||
|
("wrong b_bufobj %p should be %p", bp->b_bufobj, bo));
|
||||||
if (bp->b_bufobj != bo) { /* XXX: necessary ? */
|
if (bp->b_bufobj != bo) { /* XXX: necessary ? */
|
||||||
|
BUF_UNLOCK(bp);
|
||||||
BO_LOCK(bo);
|
BO_LOCK(bo);
|
||||||
return (EAGAIN);
|
return (EAGAIN);
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user