Author: avg
Date: Wed Jul 13 09:15:12 2016
New Revision: 302725
URL: https://svnweb.freebsd.org/changeset/base/302725

Log:
  MFC r299900: zfsctl: fix several problems with reference counts
  
  PR:           207464

Modified:
  stable/9/sys/cddl/compat/opensolaris/kern/opensolaris_vfs.c
  stable/9/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_ctldir.c
  stable/9/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_vfsops.c
Directory Properties:
  stable/9/sys/   (props changed)
  stable/9/sys/cddl/contrib/opensolaris/   (props changed)

Modified: stable/9/sys/cddl/compat/opensolaris/kern/opensolaris_vfs.c
==============================================================================
--- stable/9/sys/cddl/compat/opensolaris/kern/opensolaris_vfs.c Wed Jul 13 
09:14:45 2016        (r302724)
+++ stable/9/sys/cddl/compat/opensolaris/kern/opensolaris_vfs.c Wed Jul 13 
09:15:12 2016        (r302725)
@@ -229,7 +229,7 @@ mount_snapshot(kthread_t *td, vnode_t **
        vfs_event_signal(NULL, VQ_MOUNT, 0);
        if (VFS_ROOT(mp, LK_EXCLUSIVE, &mvp))
                panic("mount: lost mount");
-       vput(vp);
+       VOP_UNLOCK(vp, 0);
        vfs_unbusy(mp);
        *vpp = mvp;
        return (0);

Modified: stable/9/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_ctldir.c
==============================================================================
--- stable/9/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_ctldir.c        
Wed Jul 13 09:14:45 2016        (r302724)
+++ stable/9/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_ctldir.c        
Wed Jul 13 09:15:12 2016        (r302725)
@@ -1062,7 +1062,6 @@ zfsctl_snapdir_lookup(ap)
        sep->se_name = kmem_alloc(strlen(nm) + 1, KM_SLEEP);
        (void) strcpy(sep->se_name, nm);
        *vpp = sep->se_root = zfsctl_snapshot_mknode(dvp, dmu_objset_id(snap));
-       VN_HOLD(*vpp);
        avl_insert(&sdp->sd_snaps, sep, where);
 
        dmu_objset_rele(snap, FTAG);
@@ -1439,7 +1438,6 @@ zfsctl_snapshot_mknode(vnode_t *pvp, uin
 
        vp = gfs_dir_create(sizeof (zfsctl_node_t), pvp, pvp->v_vfsp,
            &zfsctl_ops_snapshot, NULL, NULL, MAXNAMELEN, NULL, NULL);
-       VN_HOLD(vp);
        zcp = vp->v_data;
        zcp->zc_id = objset;
        VOP_UNLOCK(vp, 0);

Modified: stable/9/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_vfsops.c
==============================================================================
--- stable/9/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_vfsops.c        
Wed Jul 13 09:14:45 2016        (r302724)
+++ stable/9/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_vfsops.c        
Wed Jul 13 09:15:12 2016        (r302725)
@@ -2051,12 +2051,6 @@ zfs_umount(vfs_t *vfsp, int fflag)
         */
        if (zfsvfs->z_ctldir != NULL)
                zfsctl_destroy(zfsvfs);
-       if (zfsvfs->z_issnap) {
-               vnode_t *svp = vfsp->mnt_vnodecovered;
-
-               if (svp->v_count >= 2)
-                       VN_RELE(svp);
-       }
        zfs_freevfs(vfsp);
 
        return (0);
_______________________________________________
svn-src-stable-9@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-stable-9
To unsubscribe, send any mail to "svn-src-stable-9-unsubscr...@freebsd.org"

Reply via email to