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>

Split Close
Expand all
Collapse all
          --- old/usr/src/uts/common/fs/zfs/zfs_znode.c
          +++ new/usr/src/uts/common/fs/zfs/zfs_znode.c
↓ open down ↓ 1741 lines elided ↑ open up ↑
1742 1742  
1743 1743  void
1744 1744  zfs_create_fs(objset_t *os, cred_t *cr, nvlist_t *zplprops, dmu_tx_t *tx)
1745 1745  {
1746 1746          uint64_t        moid, obj, sa_obj, version;
1747 1747          uint64_t        sense = ZFS_CASE_SENSITIVE;
1748 1748          uint64_t        norm = 0;
1749 1749          nvpair_t        *elem;
1750 1750          int             error;
1751 1751          int             i;
     1752 +        int size = spa_get_obj_mtx_sz(dmu_objset_spa(os));
1752 1753          znode_t         *rootzp = NULL;
1753 1754          zfsvfs_t        *zfsvfs;
1754 1755          vnode_t         *vp;
1755 1756          vattr_t         vattr;
1756 1757          znode_t         *zp;
1757 1758          zfs_acl_ids_t   acl_ids;
1758 1759  
1759 1760          /*
1760 1761           * First attempt to create master node.
1761 1762           */
↓ open down ↓ 92 lines elided ↑ open up ↑
1854 1855           * Fold case on file systems that are always or sometimes case
1855 1856           * insensitive.
1856 1857           */
1857 1858          if (sense == ZFS_CASE_INSENSITIVE || sense == ZFS_CASE_MIXED)
1858 1859                  zfsvfs->z_norm |= U8_TEXTPREP_TOUPPER;
1859 1860  
1860 1861          mutex_init(&zfsvfs->z_znodes_lock, NULL, MUTEX_DEFAULT, NULL);
1861 1862          list_create(&zfsvfs->z_all_znodes, sizeof (znode_t),
1862 1863              offsetof(znode_t, z_link_node));
1863 1864  
1864      -        for (i = 0; i != ZFS_OBJ_MTX_SZ; i++)
     1865 +        zfsvfs->z_hold_mtx_sz = size;
     1866 +        zfsvfs->z_hold_mtx = kmem_zalloc(sizeof (kmutex_t) * size, KM_SLEEP);
     1867 +        for (i = 0; i != size; i++)
1865 1868                  mutex_init(&zfsvfs->z_hold_mtx[i], NULL, MUTEX_DEFAULT, NULL);
1866 1869  
1867 1870          rootzp->z_zfsvfs = zfsvfs;
1868 1871          VERIFY(0 == zfs_acl_ids_create(rootzp, IS_ROOT_NODE, &vattr,
1869 1872              cr, NULL, &acl_ids));
1870 1873          zfs_mknode(rootzp, &vattr, tx, cr, IS_ROOT_NODE, &zp, &acl_ids);
1871 1874          ASSERT3P(zp, ==, rootzp);
1872 1875          ASSERT(!vn_in_dnlc(ZTOV(rootzp))); /* not valid to move */
1873 1876          error = zap_add(os, moid, ZFS_ROOT_OBJ, 8, 1, &rootzp->z_id, tx);
1874 1877          ASSERT(error == 0);
↓ open down ↓ 5 lines elided ↑ open up ↑
1880 1883          kmem_cache_free(znode_cache, rootzp);
1881 1884  
1882 1885          /*
1883 1886           * Create shares directory
1884 1887           */
1885 1888  
1886 1889          error = zfs_create_share_dir(zfsvfs, tx);
1887 1890  
1888 1891          ASSERT(error == 0);
1889 1892  
1890      -        for (i = 0; i != ZFS_OBJ_MTX_SZ; i++)
     1893 +        for (i = 0; i != size; i++)
1891 1894                  mutex_destroy(&zfsvfs->z_hold_mtx[i]);
     1895 +
     1896 +        kmem_free(zfsvfs->z_hold_mtx, sizeof (kmutex_t) * size);
1892 1897          kmem_free(zfsvfs, sizeof (zfsvfs_t));
1893 1898  }
1894 1899  
1895 1900  #endif /* _KERNEL */
1896 1901  
1897 1902  static int
1898 1903  zfs_sa_setup(objset_t *osp, sa_attr_type_t **sa_table)
1899 1904  {
1900 1905          uint64_t sa_obj = 0;
1901 1906          int error;
↓ open down ↓ 248 lines elided ↑ open up ↑
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX