diff options
author | bp <bp@FreeBSD.org> | 2000-10-15 06:25:42 +0000 |
---|---|---|
committer | bp <bp@FreeBSD.org> | 2000-10-15 06:25:42 +0000 |
commit | b9d830d3e775d119f3f2d60cd9d3c1573a8a0796 (patch) | |
tree | e61ed07c0810847236d696821e0208d909ed955e /sys/fs | |
parent | 1f6d21dd38b506092bdf9b10eda2b5fa1d581017 (diff) | |
download | FreeBSD-src-b9d830d3e775d119f3f2d60cd9d3c1573a8a0796.zip FreeBSD-src-b9d830d3e775d119f3f2d60cd9d3c1573a8a0796.tar.gz |
Fix nullfs breakage caused by incomplete migration of v_interlock from
simple_lock to mutex.
Reset LK_INTERLOCK flag when interlock released manually.
Diffstat (limited to 'sys/fs')
-rw-r--r-- | sys/fs/nullfs/null_vnops.c | 8 |
1 files changed, 5 insertions, 3 deletions
diff --git a/sys/fs/nullfs/null_vnops.c b/sys/fs/nullfs/null_vnops.c index 9c15f9d..7ce4bd2 100644 --- a/sys/fs/nullfs/null_vnops.c +++ b/sys/fs/nullfs/null_vnops.c @@ -625,7 +625,7 @@ null_lock(ap) if (lvp == NULL) return (lockmgr(&vp->v_lock, flags, &vp->v_interlock, p)); if (flags & LK_INTERLOCK) { - simple_unlock(&vp->v_interlock); + mtx_exit(&vp->v_interlock, MTX_DEF); flags &= ~LK_INTERLOCK; } if ((flags & LK_TYPE_MASK) == LK_DRAIN) { @@ -671,8 +671,10 @@ null_unlock(ap) if (lvp == NULL) return (lockmgr(&vp->v_lock, flags | LK_RELEASE, &vp->v_interlock, p)); if ((flags & LK_THISLAYER) == 0) { - if (flags & LK_INTERLOCK) - simple_unlock(&vp->v_interlock); + if (flags & LK_INTERLOCK) { + mtx_exit(&vp->v_interlock, MTX_DEF); + flags &= ~LK_INTERLOCK; + } VOP_UNLOCK(lvp, flags & ~LK_INTERLOCK, p); } else flags &= ~LK_THISLAYER; |