Author: avg
Date: Wed Jul 13 09:21:40 2016
New Revision: 302728
URL: https://svnweb.freebsd.org/changeset/base/302728

Log:
  MFC r302123: fix deadlock-prone code in getzfsvfs()

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

Modified: stable/9/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_ioctl.c
==============================================================================
--- stable/9/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_ioctl.c Wed Jul 
13 09:21:28 2016        (r302727)
+++ stable/9/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_ioctl.c Wed Jul 
13 09:21:40 2016        (r302728)
@@ -1428,6 +1428,7 @@ static int
 getzfsvfs(const char *dsname, zfsvfs_t **zfvp)
 {
        objset_t *os;
+       vfs_t *vfsp;
        int error;
 
        error = dmu_objset_hold(dsname, FTAG, &os);
@@ -1441,19 +1442,21 @@ getzfsvfs(const char *dsname, zfsvfs_t *
        mutex_enter(&os->os_user_ptr_lock);
        *zfvp = dmu_objset_get_user(os);
        if (*zfvp) {
-#ifdef illumos
-               VFS_HOLD((*zfvp)->z_vfs);
-#else
-               if (vfs_busy((*zfvp)->z_vfs, 0) != 0) {
-                       *zfvp = NULL;
-                       error = SET_ERROR(ESRCH);
-               }
-#endif
+               vfsp = (*zfvp)->z_vfs;
+               vfs_ref(vfsp);
        } else {
                error = SET_ERROR(ESRCH);
        }
        mutex_exit(&os->os_user_ptr_lock);
        dmu_objset_rele(os, FTAG);
+       if (error == 0) {
+               error = vfs_busy(vfsp, 0);
+               vfs_rel(vfsp);
+               if (error != 0) {
+                       *zfvp = NULL;
+                       error = SET_ERROR(ESRCH);
+               }
+       }
        return (error);
 }
 
_______________________________________________
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