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)) {