summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorenami <enami@NetBSD.org>2000-09-05 05:13:43 +0000
committerenami <enami@NetBSD.org>2000-09-05 05:13:43 +0000
commit445cbcb8c19a4125a822fdd2d5cb0ea791ffac8f (patch)
treefb1516638f87b6b6fe4fe484bb182020f12ddeeb
parentef2b36122280917778bfcacac22786c67c367662 (diff)
Accquire vnode interlock while playing with flags to see if there
is someone waiting this vnode.
-rw-r--r--sys/kern/vfs_subr.c7
1 files changed, 5 insertions, 2 deletions
diff --git a/sys/kern/vfs_subr.c b/sys/kern/vfs_subr.c
index d19183ce7e2..730f6d65485 100644
--- a/sys/kern/vfs_subr.c
+++ b/sys/kern/vfs_subr.c
@@ -1,4 +1,4 @@
-/* $NetBSD: vfs_subr.c,v 1.138 2000/08/31 14:41:35 bouyer Exp $ */
+/* $NetBSD: vfs_subr.c,v 1.139 2000/09/05 05:13:43 enami Exp $ */
/*-
* Copyright (c) 1997, 1998 The NetBSD Foundation, Inc.
@@ -1509,11 +1509,14 @@ vclean(vp, flags, p)
*/
vp->v_op = dead_vnodeop_p;
vp->v_tag = VT_NON;
+ simple_lock(&vp->v_interlock);
vp->v_flag &= ~VXLOCK;
if (vp->v_flag & VXWANT) {
vp->v_flag &= ~VXWANT;
+ simple_unlock(&vp->v_interlock);
wakeup((caddr_t)vp);
- }
+ } else
+ simple_unlock(&vp->v_interlock);
}
/*