summaryrefslogtreecommitdiffstats
path: root/sys
diff options
context:
space:
mode:
Diffstat (limited to 'sys')
-rw-r--r--sys/kern/vfs_subr.c30
1 files changed, 15 insertions, 15 deletions
diff --git a/sys/kern/vfs_subr.c b/sys/kern/vfs_subr.c
index 277430d..3c61b17 100644
--- a/sys/kern/vfs_subr.c
+++ b/sys/kern/vfs_subr.c
@@ -1727,18 +1727,18 @@ vrele(vp)
if (vp->v_usecount == 1) {
vp->v_usecount--;
+ /*
+ * We must call VOP_INACTIVE with the node locked.
+ * If we are doing a vput, the node is already locked,
+ * but, in the case of vrele, we must explicitly lock
+ * the vnode before calling VOP_INACTIVE.
+ */
+ if (vn_lock(vp, LK_EXCLUSIVE | LK_INTERLOCK, td) == 0)
+ VOP_INACTIVE(vp, td);
if (VSHOULDFREE(vp))
vfree(vp);
else
vlruvp(vp);
- /*
- * If we are doing a vput, the node is already locked, and we must
- * call VOP_INACTIVE with the node locked. So, in the case of
- * vrele, we explicitly lock the vnode before calling VOP_INACTIVE.
- */
- if (vn_lock(vp, LK_EXCLUSIVE | LK_INTERLOCK, td) == 0) {
- VOP_INACTIVE(vp, td);
- }
} else {
#ifdef DIAGNOSTIC
@@ -1776,17 +1776,17 @@ vput(vp)
if (vp->v_usecount == 1) {
vp->v_usecount--;
+ /*
+ * We must call VOP_INACTIVE with the node locked.
+ * If we are doing a vput, the node is already locked,
+ * so we just need to release the vnode mutex.
+ */
+ mtx_unlock(&vp->v_interlock);
+ VOP_INACTIVE(vp, td);
if (VSHOULDFREE(vp))
vfree(vp);
else
vlruvp(vp);
- /*
- * If we are doing a vput, the node is already locked, and we must
- * call VOP_INACTIVE with the node locked. So, in the case of
- * vrele, we explicitly lock the vnode before calling VOP_INACTIVE.
- */
- mtx_unlock(&vp->v_interlock);
- VOP_INACTIVE(vp, td);
} else {
#ifdef DIAGNOSTIC
OpenPOWER on IntegriCloud