Print this page
NEX-9200 Improve the scalability of attribute locking in zfs_zget
Reviewed by: Joyce McIntosh <joyce.mcintosh@nexenta.com>
Reviewed by: Sanjay Nadkarni <sanjay.nadkarni@nexenta.com>
6385 Fix unlocking order in zfs_zget
Reviewed by: Brian Behlendorf <behlendorf1@llnl.gov>
Reviewed by: Matthew Ahrens <mahrens@delphix.com>
Reviewed by: Dan Kimmel <dan.kimmel@delphix.com>
Reviewed by: Andriy Gapon <avg@freebsd.org>
Approved by: Robert Mustacchi <rm@joyent.com>
5961 Fix stack overflow in zfs_create_fs
Reviewed by: George Wilson <george@delphix.com>
Reviewed by: Matthew Ahrens <mahrens@delphix.com>
Approved by: Dan McDonald <danmcd@omniti.com>
4370 avoid transmitting holes during zfs send
4371 DMU code clean up
Reviewed by: Matthew Ahrens <mahrens@delphix.com>
Reviewed by: George Wilson <george.wilson@delphix.com>
Reviewed by: Christopher Siden <christopher.siden@delphix.com>
Reviewed by: Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
Approved by: Garrett D'Amore <garrett@damore.org>

@@ -1747,10 +1747,11 @@
         uint64_t        sense = ZFS_CASE_SENSITIVE;
         uint64_t        norm = 0;
         nvpair_t        *elem;
         int             error;
         int             i;
+        int size = spa_get_obj_mtx_sz(dmu_objset_spa(os));
         znode_t         *rootzp = NULL;
         zfsvfs_t        *zfsvfs;
         vnode_t         *vp;
         vattr_t         vattr;
         znode_t         *zp;

@@ -1859,11 +1860,13 @@
 
         mutex_init(&zfsvfs->z_znodes_lock, NULL, MUTEX_DEFAULT, NULL);
         list_create(&zfsvfs->z_all_znodes, sizeof (znode_t),
             offsetof(znode_t, z_link_node));
 
-        for (i = 0; i != ZFS_OBJ_MTX_SZ; i++)
+        zfsvfs->z_hold_mtx_sz = size;
+        zfsvfs->z_hold_mtx = kmem_zalloc(sizeof (kmutex_t) * size, KM_SLEEP);
+        for (i = 0; i != size; i++)
                 mutex_init(&zfsvfs->z_hold_mtx[i], NULL, MUTEX_DEFAULT, NULL);
 
         rootzp->z_zfsvfs = zfsvfs;
         VERIFY(0 == zfs_acl_ids_create(rootzp, IS_ROOT_NODE, &vattr,
             cr, NULL, &acl_ids));

@@ -1885,12 +1888,14 @@
 
         error = zfs_create_share_dir(zfsvfs, tx);
 
         ASSERT(error == 0);
 
-        for (i = 0; i != ZFS_OBJ_MTX_SZ; i++)
+        for (i = 0; i != size; i++)
                 mutex_destroy(&zfsvfs->z_hold_mtx[i]);
+
+        kmem_free(zfsvfs->z_hold_mtx, sizeof (kmutex_t) * size);
         kmem_free(zfsvfs, sizeof (zfsvfs_t));
 }
 
 #endif /* _KERNEL */