Print this page
5056 ZFS deadlock on db_mtx and dn_holds
Reviewed by: Will Andrews <willa@spectralogic.com>
Reviewed by: Matt Ahrens <mahrens@delphix.com>
Reviewed by: George Wilson <george.wilson@delphix.com>
Approved by: Dan McDonald <danmcd@omniti.com>

Split Close
Expand all
Collapse all
          --- old/usr/src/uts/common/fs/zfs/dsl_bookmark.c
          +++ new/usr/src/uts/common/fs/zfs/dsl_bookmark.c
↓ open down ↓ 112 lines elided ↑ open up ↑
 113  113  static int
 114  114  dsl_bookmark_create_check_impl(dsl_dataset_t *snapds, const char *bookmark_name,
 115  115      dmu_tx_t *tx)
 116  116  {
 117  117          dsl_pool_t *dp = dmu_tx_pool(tx);
 118  118          dsl_dataset_t *bmark_fs;
 119  119          char *shortname;
 120  120          int error;
 121  121          zfs_bookmark_phys_t bmark_phys;
 122  122  
 123      -        if (!dsl_dataset_is_snapshot(snapds))
      123 +        if (!snapds->ds_is_snapshot)
 124  124                  return (SET_ERROR(EINVAL));
 125  125  
 126  126          error = dsl_bookmark_hold_ds(dp, bookmark_name,
 127  127              &bmark_fs, FTAG, &shortname);
 128  128          if (error != 0)
 129  129                  return (error);
 130  130  
 131  131          if (!dsl_dataset_is_before(bmark_fs, snapds, 0)) {
 132  132                  dsl_dataset_rele(bmark_fs, FTAG);
 133  133                  return (SET_ERROR(EINVAL));
↓ open down ↓ 324 lines elided ↑ open up ↑
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX