Set flag in needsbuffer while still holding bqlock to avoid lost wakeup.

This commit is contained in:
Tor Egge 2006-01-16 22:09:47 +00:00
parent d5807d9482
commit dffaf91aa3

View file

@ -1907,7 +1907,6 @@ restart:
int flags;
char *waitmsg;
mtx_unlock(&bqlock);
if (defrag) {
flags = VFS_BIO_NEED_BUFSPACE;
waitmsg = "nbufkv";
@ -1918,11 +1917,14 @@ restart:
waitmsg = "newbuf";
flags = VFS_BIO_NEED_ANY;
}
mtx_lock(&nblock);
needsbuffer |= flags;
mtx_unlock(&nblock);
mtx_unlock(&bqlock);
bd_speedup(); /* heeeelp */
mtx_lock(&nblock);
needsbuffer |= flags;
while (needsbuffer & flags) {
if (msleep(&needsbuffer, &nblock,
(PRIBIO + 4) | slpflag, waitmsg, slptimeo)) {