From dffaf91aa34835df0cee971de3c3bc7003398112 Mon Sep 17 00:00:00 2001 From: Tor Egge Date: Mon, 16 Jan 2006 22:09:47 +0000 Subject: [PATCH] Set flag in needsbuffer while still holding bqlock to avoid lost wakeup. --- sys/kern/vfs_bio.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/sys/kern/vfs_bio.c b/sys/kern/vfs_bio.c index c5192596a98..aa393aff2c4 100644 --- a/sys/kern/vfs_bio.c +++ b/sys/kern/vfs_bio.c @@ -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)) {