Author: mjg
Date: Fri Jan 31 08:37:35 2020
New Revision: 357321
URL: https://svnweb.freebsd.org/changeset/base/357321

Log:
  zfs: provide macros to handle z_teardown_inactive_lock

Modified:
  head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/zfs_vfsops.h
  head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_vfsops.c
  head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_vnops.c
  head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_znode.c

Modified: head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/zfs_vfsops.h
==============================================================================
--- head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/zfs_vfsops.h        
Fri Jan 31 08:36:49 2020        (r357320)
+++ head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/zfs_vfsops.h        
Fri Jan 31 08:37:35 2020        (r357321)
@@ -90,6 +90,24 @@ struct zfsvfs {
 #endif
 };
 
+#define        ZFS_TRYRLOCK_TEARDOWN_INACTIVE(zfsvfs) \
+               rw_tryenter(&(zfsvfs)->z_teardown_inactive_lock, RW_READER)
+
+#define        ZFS_RLOCK_TEARDOWN_INACTIVE(zfsvfs) \
+               rw_enter(&(zfsvfs)->z_teardown_inactive_lock, RW_READER)
+
+#define        ZFS_RUNLOCK_TEARDOWN_INACTIVE(zfsvfs) \
+               rw_exit(&(zfsvfs)->z_teardown_inactive_lock)
+
+#define        ZFS_WLOCK_TEARDOWN_INACTIVE(zfsvfs) \
+               rw_enter(&(zfsvfs)->z_teardown_inactive_lock, RW_WRITER)
+
+#define        ZFS_WUNLOCK_TEARDOWN_INACTIVE(zfsvfs) \
+               rw_exit(&(zfsvfs)->z_teardown_inactive_lock)
+
+#define        ZFS_WLOCK_TEARDOWN_INACTIVE_WLOCKED(zfsvfs) \
+               RW_WRITE_HELD(&(zfsvfs)->z_teardown_inactive_lock)
+
 /*
  * Normal filesystems (those not under .zfs/snapshot) have a total
  * file ID size limited to 12 bytes (including the length field) due to

Modified: head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_vfsops.c
==============================================================================
--- head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_vfsops.c    Fri Jan 
31 08:36:49 2020        (r357320)
+++ head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_vfsops.c    Fri Jan 
31 08:37:35 2020        (r357321)
@@ -2055,7 +2055,7 @@ zfsvfs_teardown(zfsvfs_t *zfsvfs, boolean_t unmounting
                zfsvfs->z_log = NULL;
        }
 
-       rw_enter(&zfsvfs->z_teardown_inactive_lock, RW_WRITER);
+       ZFS_WLOCK_TEARDOWN_INACTIVE(zfsvfs);
 
        /*
         * If we are not unmounting (ie: online recv) and someone already
@@ -2063,7 +2063,7 @@ zfsvfs_teardown(zfsvfs_t *zfsvfs, boolean_t unmounting
         * or a reopen of z_os failed then just bail out now.
         */
        if (!unmounting && (zfsvfs->z_unmounted || zfsvfs->z_os == NULL)) {
-               rw_exit(&zfsvfs->z_teardown_inactive_lock);
+               ZFS_WUNLOCK_TEARDOWN_INACTIVE(zfsvfs);
                rrm_exit(&zfsvfs->z_teardown_lock, FTAG);
                return (SET_ERROR(EIO));
        }
@@ -2091,7 +2091,7 @@ zfsvfs_teardown(zfsvfs_t *zfsvfs, boolean_t unmounting
         */
        if (unmounting) {
                zfsvfs->z_unmounted = B_TRUE;
-               rw_exit(&zfsvfs->z_teardown_inactive_lock);
+               ZFS_WUNLOCK_TEARDOWN_INACTIVE(zfsvfs);
                rrm_exit(&zfsvfs->z_teardown_lock, FTAG);
        }
 
@@ -2437,7 +2437,7 @@ zfs_resume_fs(zfsvfs_t *zfsvfs, dsl_dataset_t *ds)
        znode_t *zp;
 
        ASSERT(RRM_WRITE_HELD(&zfsvfs->z_teardown_lock));
-       ASSERT(RW_WRITE_HELD(&zfsvfs->z_teardown_inactive_lock));
+       ASSERT(ZFS_WLOCK_TEARDOWN_INACTIVE_WLOCKED(zp->z_zfsvfs));
 
        /*
         * We already own this, so just update the objset_t, as the one we
@@ -2471,7 +2471,7 @@ zfs_resume_fs(zfsvfs_t *zfsvfs, dsl_dataset_t *ds)
 
 bail:
        /* release the VOPs */
-       rw_exit(&zfsvfs->z_teardown_inactive_lock);
+       ZFS_WUNLOCK_TEARDOWN_INACTIVE(zfsvfs);
        rrm_exit(&zfsvfs->z_teardown_lock, FTAG);
 
        if (err) {

Modified: head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_vnops.c
==============================================================================
--- head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_vnops.c     Fri Jan 
31 08:36:49 2020        (r357320)
+++ head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_vnops.c     Fri Jan 
31 08:37:35 2020        (r357321)
@@ -4247,13 +4247,13 @@ zfs_inactive(vnode_t *vp, cred_t *cr, caller_context_t
        zfsvfs_t *zfsvfs = zp->z_zfsvfs;
        int error;
 
-       rw_enter(&zfsvfs->z_teardown_inactive_lock, RW_READER);
+       ZFS_RLOCK_TEARDOWN_INACTIVE(zfsvfs);
        if (zp->z_sa_hdl == NULL) {
                /*
                 * The fs has been unmounted, or we did a
                 * suspend/resume and this file no longer exists.
                 */
-               rw_exit(&zfsvfs->z_teardown_inactive_lock);
+               ZFS_RUNLOCK_TEARDOWN_INACTIVE(zfsvfs);
                vrecycle(vp);
                return;
        }
@@ -4262,7 +4262,7 @@ zfs_inactive(vnode_t *vp, cred_t *cr, caller_context_t
                /*
                 * Fast path to recycle a vnode of a removed file.
                 */
-               rw_exit(&zfsvfs->z_teardown_inactive_lock);
+               ZFS_RUNLOCK_TEARDOWN_INACTIVE(zfsvfs);
                vrecycle(vp);
                return;
        }
@@ -4282,7 +4282,7 @@ zfs_inactive(vnode_t *vp, cred_t *cr, caller_context_t
                        dmu_tx_commit(tx);
                }
        }
-       rw_exit(&zfsvfs->z_teardown_inactive_lock);
+       ZFS_RUNLOCK_TEARDOWN_INACTIVE(zfsvfs);
 }
 
 
@@ -5333,10 +5333,10 @@ zfs_freebsd_need_inactive(ap)
        if (vn_need_pageq_flush(vp))
                return (1);
 
-       if (!rw_tryenter(&zfsvfs->z_teardown_inactive_lock, RW_READER))
+       if (!ZFS_TRYRLOCK_TEARDOWN_INACTIVE(zfsvfs))
                return (1);
        need = (zp->z_sa_hdl == NULL || zp->z_unlinked || zp->z_atime_dirty);
-       rw_exit(&zfsvfs->z_teardown_inactive_lock);
+       ZFS_RUNLOCK_TEARDOWN_INACTIVE(zfsvfs);
 
        return (need);
 }
@@ -5359,12 +5359,12 @@ zfs_freebsd_reclaim(ap)
         * zfs_znode_dmu_fini in zfsvfs_teardown during
         * force unmount.
         */
-       rw_enter(&zfsvfs->z_teardown_inactive_lock, RW_READER);
+       ZFS_RLOCK_TEARDOWN_INACTIVE(zfsvfs);
        if (zp->z_sa_hdl == NULL)
                zfs_znode_free(zp);
        else
                zfs_zinactive(zp);
-       rw_exit(&zfsvfs->z_teardown_inactive_lock);
+       ZFS_RUNLOCK_TEARDOWN_INACTIVE(zfsvfs);
 
        vp->v_data = NULL;
        return (0);

Modified: head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_znode.c
==============================================================================
--- head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_znode.c     Fri Jan 
31 08:36:49 2020        (r357320)
+++ head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_znode.c     Fri Jan 
31 08:37:35 2020        (r357321)
@@ -606,7 +606,7 @@ zfs_znode_dmu_fini(znode_t *zp)
 {
        ASSERT(MUTEX_HELD(ZFS_OBJ_MUTEX(zp->z_zfsvfs, zp->z_id)) ||
            zp->z_unlinked ||
-           RW_WRITE_HELD(&zp->z_zfsvfs->z_teardown_inactive_lock));
+           ZFS_WLOCK_TEARDOWN_INACTIVE_WLOCKED(zp->z_zfsvfs));
 
        sa_handle_destroy(zp->z_sa_hdl);
        zp->z_sa_hdl = NULL;
_______________________________________________
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