Author: avg
Date: Tue Sep 26 09:32:29 2017
New Revision: 324009
URL: https://svnweb.freebsd.org/changeset/base/324009

Log:
  MFC r323480: zfs_get_vfs: reference a requested filesystem instead of 
vfs_busy-ing it
  
  Sponsored by: Panzura

Modified:
  stable/10/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_ioctl.c
Directory Properties:
  stable/10/   (props changed)

Modified: stable/10/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_ioctl.c
==============================================================================
--- stable/10/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_ioctl.c        
Tue Sep 26 09:31:17 2017        (r324008)
+++ stable/10/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_ioctl.c        
Tue Sep 26 09:32:29 2017        (r324009)
@@ -3040,13 +3040,11 @@ zfs_get_vfs(const char *resource)
        mtx_lock(&mountlist_mtx);
        TAILQ_FOREACH(vfsp, &mountlist, mnt_list) {
                if (strcmp(refstr_value(vfsp->vfs_resource), resource) == 0) {
-                       if (vfs_busy(vfsp, MBF_MNTLSTLOCK) != 0)
-                               vfsp = NULL;
+                       vfs_ref(vfsp);
                        break;
                }
        }
-       if (vfsp == NULL)
-               mtx_unlock(&mountlist_mtx);
+       mtx_unlock(&mountlist_mtx);
        return (vfsp);
 }
 
@@ -3533,7 +3531,9 @@ zfs_unmount_snap(const char *snapname)
 {
        vfs_t *vfsp;
        zfsvfs_t *zfsvfs;
+#ifdef illumos
        int err;
+#endif
 
        if (strchr(snapname, '@') == NULL)
                return (0);
@@ -3545,23 +3545,19 @@ zfs_unmount_snap(const char *snapname)
        zfsvfs = vfsp->vfs_data;
        ASSERT(!dsl_pool_config_held(dmu_objset_pool(zfsvfs->z_os)));
 
-       err = vn_vfswlock(vfsp->vfs_vnodecovered);
 #ifdef illumos
+       err = vn_vfswlock(vfsp->vfs_vnodecovered);
        VFS_RELE(vfsp);
-#else
-       vfs_unbusy(vfsp);
-#endif
        if (err != 0)
                return (SET_ERROR(err));
+#endif
 
        /*
         * Always force the unmount for snapshots.
         */
-
 #ifdef illumos
        (void) dounmount(vfsp, MS_FORCE, kcred);
 #else
-       vfs_ref(vfsp);
        (void) dounmount(vfsp, MS_FORCE, curthread);
 #endif
        return (0);
_______________________________________________
svn-src-stable-10@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-stable-10
To unsubscribe, send any mail to "svn-src-stable-10-unsubscr...@freebsd.org"

Reply via email to