diff options
author | 1998-12-28 19:35:35 +0000 | |
---|---|---|
committer | 1998-12-28 19:35:35 +0000 | |
commit | 4575037e5fc5ba4705fdb62a2ea1e0bbb49b6fce (patch) | |
tree | e26c13abe7c3a97a9d4099c0c2beb1c432e9cd64 /sys/kern/vfs_subr.c | |
parent | simple debugging for simple locks (diff) | |
download | wireguard-openbsd-4575037e5fc5ba4705fdb62a2ea1e0bbb49b6fce.tar.xz wireguard-openbsd-4575037e5fc5ba4705fdb62a2ea1e0bbb49b6fce.zip |
simple_lock fixes
Diffstat (limited to 'sys/kern/vfs_subr.c')
-rw-r--r-- | sys/kern/vfs_subr.c | 8 |
1 files changed, 6 insertions, 2 deletions
diff --git a/sys/kern/vfs_subr.c b/sys/kern/vfs_subr.c index b66b1b121d3..e01a71c12cf 100644 --- a/sys/kern/vfs_subr.c +++ b/sys/kern/vfs_subr.c @@ -1,4 +1,4 @@ -/* $OpenBSD: vfs_subr.c,v 1.29 1998/12/22 10:43:37 art Exp $ */ +/* $OpenBSD: vfs_subr.c,v 1.30 1998/12/28 19:35:35 art Exp $ */ /* $NetBSD: vfs_subr.c,v 1.53 1996/04/22 01:39:13 christos Exp $ */ /* @@ -571,8 +571,10 @@ loop: simple_lock(&spechash_slock); for (vp = *vpp; vp; vp = vp->v_specnext) { simple_lock(&vp->v_interlock); - if (nvp_rdev != vp->v_rdev || nvp->v_type != vp->v_type) + if (nvp_rdev != vp->v_rdev || nvp->v_type != vp->v_type) { + simple_unlock(&vp->v_interlock); continue; + } /* * Alias, but not in use, so flush it out. */ @@ -1018,6 +1020,8 @@ vclean(vp, flags, p) if (VOP_RECLAIM(vp, p)) panic("vclean: cannot reclaim"); if (active) { + simple_lock(&vp->v_interlock); + vp->v_usecount--; if (vp->v_usecount == 0) { if (vp->v_holdcnt > 0) |