diff options
| author | John Baldwin <jhb@FreeBSD.org> | 2000-12-01 03:43:33 +0000 |
|---|---|---|
| committer | John Baldwin <jhb@FreeBSD.org> | 2000-12-01 03:43:33 +0000 |
| commit | 21913407860853bf106c630bf8134e1e3c87c797 (patch) | |
| tree | 4a58635d54432e735b3a6bc0a1f18c99f460b1b4 /sys/kern/vfs_subr.c | |
| parent | 472fd56ea581255ced6da5814785db036f1cd3e0 (diff) | |
Notes
Diffstat (limited to 'sys/kern/vfs_subr.c')
| -rw-r--r-- | sys/kern/vfs_subr.c | 20 |
1 files changed, 7 insertions, 13 deletions
diff --git a/sys/kern/vfs_subr.c b/sys/kern/vfs_subr.c index e6fa0d7180ca..cf6029a3359f 100644 --- a/sys/kern/vfs_subr.c +++ b/sys/kern/vfs_subr.c @@ -281,19 +281,13 @@ vfs_busy(mp, flags, interlkp, p) if (flags & LK_NOWAIT) return (ENOENT); mp->mnt_kern_flag |= MNTK_MWAIT; - if (interlkp) { - mtx_exit(interlkp, MTX_DEF); - } /* * Since all busy locks are shared except the exclusive * lock granted when unmounting, the only place that a * wakeup needs to be done is at the release of the * exclusive lock at the end of dounmount. */ - tsleep((caddr_t)mp, PVFS, "vfs_busy", 0); - if (interlkp) { - mtx_enter(interlkp, MTX_DEF); - } + msleep((caddr_t)mp, interlkp, PVFS, "vfs_busy", 0); return (ENOENT); } lkflags = LK_SHARED | LK_NOPAUSE; @@ -1442,8 +1436,8 @@ vget(vp, flags, p) printf("VXLOCK interlock avoided\n"); } else { vp->v_flag |= VXWANT; - mtx_exit(&vp->v_interlock, MTX_DEF); - tsleep((caddr_t)vp, PINOD, "vget", 0); + msleep((caddr_t)vp, &vp->v_interlock, PINOD | PDROP, + "vget", 0); return (ENOENT); } } @@ -1842,8 +1836,8 @@ vop_revoke(ap) */ if (vp->v_flag & VXLOCK) { vp->v_flag |= VXWANT; - mtx_exit(&vp->v_interlock, MTX_DEF); - tsleep((caddr_t)vp, PINOD, "vop_revokeall", 0); + msleep((caddr_t)vp, &vp->v_interlock, PINOD | PDROP, + "vop_revokeall", 0); return (0); } dev = vp->v_rdev; @@ -1911,8 +1905,8 @@ vgonel(vp, p) */ if (vp->v_flag & VXLOCK) { vp->v_flag |= VXWANT; - mtx_exit(&vp->v_interlock, MTX_DEF); - tsleep((caddr_t)vp, PINOD, "vgone", 0); + msleep((caddr_t)vp, &vp->v_interlock, PINOD | PDROP, + "vgone", 0); return; } |
