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>
        
*** 530,540 ****
          pd.pd_flags = flags;
          mutex_init(&pd.pd_mtx, NULL, MUTEX_DEFAULT, NULL);
          cv_init(&pd.pd_cv, NULL, CV_DEFAULT, NULL);
  
          /* See comment on ZIL traversal in dsl_scan_visitds. */
!         if (ds != NULL && !dsl_dataset_is_snapshot(ds) && !BP_IS_HOLE(rootbp)) {
                  arc_flags_t flags = ARC_FLAG_WAIT;
                  objset_phys_t *osp;
                  arc_buf_t *buf;
  
                  err = arc_read(NULL, td.td_spa, rootbp,
--- 530,540 ----
          pd.pd_flags = flags;
          mutex_init(&pd.pd_mtx, NULL, MUTEX_DEFAULT, NULL);
          cv_init(&pd.pd_cv, NULL, CV_DEFAULT, NULL);
  
          /* See comment on ZIL traversal in dsl_scan_visitds. */
!         if (ds != NULL && !ds->ds_is_snapshot && !BP_IS_HOLE(rootbp)) {
                  arc_flags_t flags = ARC_FLAG_WAIT;
                  objset_phys_t *osp;
                  arc_buf_t *buf;
  
                  err = arc_read(NULL, td.td_spa, rootbp,