svn commit: r344154 - stable/12/sys/fs/nullfs

Konstantin Belousov kib at FreeBSD.org
Fri Feb 15 11:20:26 UTC 2019


Author: kib
Date: Fri Feb 15 11:20:25 2019
New Revision: 344154
URL: https://svnweb.freebsd.org/changeset/base/344154

Log:
  MFC r343899:
  In null_vptocnp(), cache vp->v_mount and use it for null_nodeget() call.
  
  PR:	235549

Modified:
  stable/12/sys/fs/nullfs/null_vnops.c
Directory Properties:
  stable/12/   (props changed)

Modified: stable/12/sys/fs/nullfs/null_vnops.c
==============================================================================
--- stable/12/sys/fs/nullfs/null_vnops.c	Fri Feb 15 11:19:12 2019	(r344153)
+++ stable/12/sys/fs/nullfs/null_vnops.c	Fri Feb 15 11:20:25 2019	(r344154)
@@ -870,11 +870,14 @@ null_vptocnp(struct vop_vptocnp_args *ap)
 	struct vnode **dvp = ap->a_vpp;
 	struct vnode *lvp, *ldvp;
 	struct ucred *cred = ap->a_cred;
+	struct mount *mp;
 	int error, locked;
 
 	locked = VOP_ISLOCKED(vp);
 	lvp = NULLVPTOLOWERVP(vp);
 	vhold(lvp);
+	mp = vp->v_mount;
+	vfs_ref(mp);
 	VOP_UNLOCK(vp, 0); /* vp is held by vn_vptocnp_locked that called us */
 	ldvp = lvp;
 	vref(lvp);
@@ -882,6 +885,7 @@ null_vptocnp(struct vop_vptocnp_args *ap)
 	vdrop(lvp);
 	if (error != 0) {
 		vn_lock(vp, locked | LK_RETRY);
+		vfs_rel(mp);
 		return (ENOENT);
 	}
 
@@ -893,9 +897,10 @@ null_vptocnp(struct vop_vptocnp_args *ap)
 	if (error != 0) {
 		vrele(ldvp);
 		vn_lock(vp, locked | LK_RETRY);
+		vfs_rel(mp);
 		return (ENOENT);
 	}
-	error = null_nodeget(vp->v_mount, ldvp, dvp);
+	error = null_nodeget(mp, ldvp, dvp);
 	if (error == 0) {
 #ifdef DIAGNOSTIC
 		NULLVPTOLOWERVP(*dvp);
@@ -903,6 +908,7 @@ null_vptocnp(struct vop_vptocnp_args *ap)
 		VOP_UNLOCK(*dvp, 0); /* keep reference on *dvp */
 	}
 	vn_lock(vp, locked | LK_RETRY);
+	vfs_rel(mp);
 	return (error);
 }
 


More information about the svn-src-all mailing list