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>

Split Close
Expand all
Collapse all
          --- old/usr/src/uts/common/fs/zfs/sys/zfs_znode.h
          +++ new/usr/src/uts/common/fs/zfs/sys/zfs_znode.h
↓ open down ↓ 239 lines elided ↑ open up ↑
 240  240  /* Verifies the znode is valid */
 241  241  #define ZFS_VERIFY_ZP(zp) \
 242  242          if ((zp)->z_sa_hdl == NULL) { \
 243  243                  ZFS_EXIT((zp)->z_zfsvfs); \
 244  244                  return (EIO); \
 245  245          } \
 246  246  
 247  247  /*
 248  248   * Macros for dealing with dmu_buf_hold
 249  249   */
 250      -#define ZFS_OBJ_HASH(obj_num)   ((obj_num) & (ZFS_OBJ_MTX_SZ - 1))
      250 +#define ZFS_OBJ_HASH(obj_num, table_sz) ((obj_num) & (table_sz - 1))
 251  251  #define ZFS_OBJ_MUTEX(zfsvfs, obj_num)  \
 252      -        (&(zfsvfs)->z_hold_mtx[ZFS_OBJ_HASH(obj_num)])
      252 +        (&(zfsvfs)->z_hold_mtx[ZFS_OBJ_HASH(obj_num, (zfsvfs)->z_hold_mtx_sz)])
 253  253  #define ZFS_OBJ_HOLD_ENTER(zfsvfs, obj_num) \
 254  254          mutex_enter(ZFS_OBJ_MUTEX((zfsvfs), (obj_num)))
 255  255  #define ZFS_OBJ_HOLD_TRYENTER(zfsvfs, obj_num) \
 256  256          mutex_tryenter(ZFS_OBJ_MUTEX((zfsvfs), (obj_num)))
 257  257  #define ZFS_OBJ_HOLD_EXIT(zfsvfs, obj_num) \
 258  258          mutex_exit(ZFS_OBJ_MUTEX((zfsvfs), (obj_num)))
 259  259  
 260  260  /* Encode ZFS stored time values from a struct timespec */
 261  261  #define ZFS_TIME_ENCODE(tp, stmp)               \
 262  262  {                                               \
↓ open down ↓ 88 lines elided ↑ open up ↑
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX