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-stable-12
mailing list