Index: sys/kern/vfs_mount.c =================================================================== --- sys/kern/vfs_mount.c +++ sys/kern/vfs_mount.c @@ -2110,9 +2110,8 @@ if ((coveredvp = mp->mnt_vnodecovered) != NULL) { mnt_gen_r = mp->mnt_gen; - VI_LOCK(coveredvp); - vholdl(coveredvp); - vn_lock(coveredvp, LK_EXCLUSIVE | LK_INTERLOCK | LK_RETRY); + vhold(coveredvp); + vn_lock(coveredvp, LK_EXCLUSIVE | LK_RETRY); /* * Check for mp being unmounted while waiting for the * covered vnode lock. Index: sys/kern/vfs_subr.c =================================================================== --- sys/kern/vfs_subr.c +++ sys/kern/vfs_subr.c @@ -3268,7 +3268,8 @@ case LK_EXCLOTHER: case 0: want_unlock = true; - error = vn_lock(vp, LK_EXCLUSIVE | LK_INTERLOCK); + VI_UNLOCK(vp); + error = vn_lock(vp, LK_EXCLUSIVE); VI_LOCK(vp); break; default: @@ -3284,14 +3285,15 @@ case VPUT: want_unlock = true; if (VOP_ISLOCKED(vp) != LK_EXCLUSIVE) { - error = VOP_LOCK(vp, LK_UPGRADE | LK_INTERLOCK | - LK_NOWAIT); + VI_UNLOCK(vp); + error = VOP_LOCK(vp, LK_UPGRADE | LK_NOWAIT); VI_LOCK(vp); } break; case VUNREF: if (VOP_ISLOCKED(vp) != LK_EXCLUSIVE) { - error = VOP_LOCK(vp, LK_TRYUPGRADE | LK_INTERLOCK); + VI_UNLOCK(vp); + error = VOP_LOCK(vp, LK_TRYUPGRADE); VI_LOCK(vp); } break; @@ -3813,7 +3815,8 @@ loop: MNT_VNODE_FOREACH_ALL(vp, mp, mvp) { vholdl(vp); - error = vn_lock(vp, LK_INTERLOCK | LK_EXCLUSIVE); + VI_UNLOCK(vp); + error = vn_lock(vp, LK_EXCLUSIVE); if (error) { vdrop(vp); MNT_VNODE_FOREACH_ALL_ABORT(mp, mvp); @@ -3888,7 +3891,8 @@ ("vflush: usecount %d < rootrefs %d", rootvp->v_usecount, rootrefs)); if (busy == 1 && rootvp->v_usecount == rootrefs) { - VOP_LOCK(rootvp, LK_EXCLUSIVE|LK_INTERLOCK); + VI_UNLOCK(vp); + VOP_LOCK(rootvp, LK_EXCLUSIVE); vgone(rootvp); VOP_UNLOCK(rootvp); busy = 0; Index: sys/ufs/ffs/ffs_snapshot.c =================================================================== --- sys/ufs/ffs/ffs_snapshot.c +++ sys/ufs/ffs/ffs_snapshot.c @@ -564,7 +564,8 @@ continue; } vholdl(xvp); - if (vn_lock(xvp, LK_EXCLUSIVE | LK_INTERLOCK) != 0) { + VI_UNLOCK(xvp); + if (vn_lock(xvp, LK_EXCLUSIVE) != 0) { MNT_VNODE_FOREACH_ALL_ABORT(mp, mvp); vdrop(xvp); goto loop; @@ -2556,8 +2557,9 @@ continue; } vholdl(vp); + VI_UNLOCK(vp); retry_vnode: - error = vn_lock(vp, LK_EXCLUSIVE | LK_INTERLOCK); + error = vn_lock(vp, LK_EXCLUSIVE); if (error != 0) { vdrop(vp); if (error == ENOENT) Index: sys/ufs/ffs/ffs_softdep.c =================================================================== --- sys/ufs/ffs/ffs_softdep.c +++ sys/ufs/ffs/ffs_softdep.c @@ -13537,7 +13537,8 @@ MNT_VNODE_FOREACH_LAZY(vp, mp, mvp, softdep_request_cleanup_filter, NULL) { vholdl(vp); - vn_lock(vp, LK_EXCLUSIVE | LK_INTERLOCK | LK_RETRY); + VI_UNLOCK(vp); + vn_lock(vp, LK_EXCLUSIVE | LK_RETRY); VI_LOCK(vp); if (IS_UFS(vp) && vp->v_usecount == 0) { while ((vp->v_iflag & VI_OWEINACT) != 0) {