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/zil.c
          +++ new/usr/src/uts/common/fs/zfs/zil.c
↓ open down ↓ 466 lines elided ↑ open up ↑
 467  467  /*
 468  468   * Called when we create in-memory log transactions so that we know
 469  469   * to cleanup the itxs at the end of spa_sync().
 470  470   */
 471  471  void
 472  472  zilog_dirty(zilog_t *zilog, uint64_t txg)
 473  473  {
 474  474          dsl_pool_t *dp = zilog->zl_dmu_pool;
 475  475          dsl_dataset_t *ds = dmu_objset_ds(zilog->zl_os);
 476  476  
 477      -        if (dsl_dataset_is_snapshot(ds))
      477 +        if (ds->ds_is_snapshot)
 478  478                  panic("dirtying snapshot!");
 479  479  
 480  480          if (txg_list_add(&dp->dp_dirty_zilogs, zilog, txg)) {
 481  481                  /* up the hold count until we can be written out */
 482  482                  dmu_buf_add_ref(ds->ds_dbuf, zilog);
 483  483          }
 484  484  }
 485  485  
 486  486  boolean_t
 487  487  zilog_is_dirty(zilog_t *zilog)
↓ open down ↓ 1646 lines elided ↑ open up ↑
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX