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_userhold.c
          +++ new/usr/src/uts/common/fs/zfs/dsl_userhold.c
↓ open down ↓ 344 lines elided ↑ open up ↑
 345  345  
 346  346  static int
 347  347  dsl_dataset_user_release_check_one(dsl_dataset_user_release_arg_t *ddura,
 348  348      dsl_dataset_t *ds, nvlist_t *holds, const char *snapname)
 349  349  {
 350  350          uint64_t zapobj;
 351  351          nvlist_t *holds_found;
 352  352          objset_t *mos;
 353  353          int numholds;
 354  354  
 355      -        if (!dsl_dataset_is_snapshot(ds))
      355 +        if (!ds->ds_is_snapshot)
 356  356                  return (SET_ERROR(EINVAL));
 357  357  
 358  358          if (nvlist_empty(holds))
 359  359                  return (0);
 360  360  
 361  361          numholds = 0;
 362  362          mos = ds->ds_dir->dd_pool->dp_meta_objset;
 363  363          zapobj = dsl_dataset_phys(ds)->ds_userrefs_obj;
 364  364          holds_found = fnvlist_alloc();
 365  365  
↓ open down ↓ 301 lines elided ↑ open up ↑
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX