summaryrefslogtreecommitdiff
path: root/sys/nfs
diff options
context:
space:
mode:
authorBob Beck <beck@cvs.openbsd.org>2013-06-25 02:53:48 +0000
committerBob Beck <beck@cvs.openbsd.org>2013-06-25 02:53:48 +0000
commitbdc44403f335a39fb4f8fefe713659a2173c95b0 (patch)
treefe06cab3923574943c6076b35c92db0d9fbaef3c /sys/nfs
parent00342b859e7cfc2694cae3ea50581cd5dce57118 (diff)
When we remove work from the nfs queue, wake up people waiting for
room to queue IO right away, rather than waiting for us to complete the IO we are working on and potentially do a many buffers DELWRI dance before waking up the sleepers so they can continue. ok guether@ tedu@
Diffstat (limited to 'sys/nfs')
-rw-r--r--sys/nfs/nfs_syscalls.c4
1 files changed, 2 insertions, 2 deletions
diff --git a/sys/nfs/nfs_syscalls.c b/sys/nfs/nfs_syscalls.c
index ce4549057c9..475caba0e64 100644
--- a/sys/nfs/nfs_syscalls.c
+++ b/sys/nfs/nfs_syscalls.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: nfs_syscalls.c,v 1.94 2012/12/10 22:34:53 beck Exp $ */
+/* $OpenBSD: nfs_syscalls.c,v 1.95 2013/06/25 02:53:47 beck Exp $ */
/* $NetBSD: nfs_syscalls.c,v 1.19 1996/02/18 11:53:52 fvdl Exp $ */
/*
@@ -610,6 +610,7 @@ nfssvc_iod(void *arg)
/* Take one off the front of the list */
TAILQ_REMOVE(&nfs_bufq, bp, b_freelist);
nfs_bufqlen--;
+ wakeup_one(&nfs_bufqlen);
if (bp->b_flags & B_READ)
(void) nfs_doio(bp, NULL);
else do {
@@ -643,7 +644,6 @@ nfssvc_iod(void *arg)
(void) nfs_doio(bp, NULL);
} while ((bp = nbp) != NULL);
- wakeup_one(&nfs_bufqlen); /* wake up anyone waiting for room to enqueue IO */
}
if (error) {
nfs_asyncdaemon[myiod] = NULL;