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);
 }
 
_______________________________________________
svn-src-all@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"

Reply via email to