diff --git a/sys/fs/nullfs/null_vnops.c b/sys/fs/nullfs/null_vnops.c index a921d7ae084e..7355090a23d2 100644 --- a/sys/fs/nullfs/null_vnops.c +++ b/sys/fs/nullfs/null_vnops.c @@ -714,6 +714,8 @@ null_unlock(struct vop_unlock_args *ap) struct vnode *lvp; int error; + if (ap->a_flags & LK_INTERLOCK) + panic("%s: LK_INTERLOCK passed", __func__); nn = VTONULL(vp); if (nn != NULL && (lvp = NULLVPTOLOWERVP(vp)) != NULL) { vholdnz(lvp); diff --git a/sys/kern/vfs_subr.c b/sys/kern/vfs_subr.c index 907b071020d7..a09c4baefb5b 100644 --- a/sys/kern/vfs_subr.c +++ b/sys/kern/vfs_subr.c @@ -1034,8 +1034,8 @@ vlrureclaim(struct mount *mp, bool reclaim_nc_src, int trigger) (vp->v_iflag & VI_FREE) != 0 || (vp->v_object != NULL && vp->v_object->resident_page_count > trigger)) { - VOP_UNLOCK(vp, LK_INTERLOCK); - vdrop(vp); + VOP_UNLOCK(vp, 0); + vdropl(vp); goto next_iter_mntunlocked; } KASSERT((vp->v_iflag & VI_DOOMED) == 0, @@ -1398,7 +1398,8 @@ vtryrecycle(struct vnode *vp) */ VI_LOCK(vp); if (vp->v_usecount) { - VOP_UNLOCK(vp, LK_INTERLOCK); + VOP_UNLOCK(vp, 0); + VI_UNLOCK(vp); vn_finished_write(vnmp); CTR2(KTR_VFS, "%s: impossible to recycle, %p is already referenced", @@ -1409,7 +1410,8 @@ vtryrecycle(struct vnode *vp) counter_u64_add(recycles_count, 1); vgonel(vp); } - VOP_UNLOCK(vp, LK_INTERLOCK); + VOP_UNLOCK(vp, 0); + VI_UNLOCK(vp); vn_finished_write(vnmp); return (0); }