Lines Matching defs:dr

53 static void dbuf_write(dbuf_dirty_record_t *dr, arc_buf_t *data, dmu_tx_t *tx);
675 dbuf_dirty_record_t *dr;
708 for (dr = db->db_data_pending; dr != NULL; dr = dr->dr_next)
709 ASSERT(dr->dr_dbuf == db);
711 for (dr = db->db_last_dirty; dr != NULL; dr = dr->dr_next)
712 ASSERT(dr->dr_dbuf == db);
720 dr = db->db_data_pending;
725 ASSERT(dr == NULL || dr->dt.dl.dr_data == db->db_buf);
1042 dbuf_dirty_record_t *dr = db->db_last_dirty;
1049 if (dr == NULL ||
1050 (dr->dt.dl.dr_data !=
1061 ASSERT(dr->dr_txg >= txg - 2);
1064 dr->dt.dl.dr_data = zio_buf_alloc(DN_MAX_BONUSLEN);
1066 bcopy(db->db.db_data, dr->dt.dl.dr_data, DN_MAX_BONUSLEN);
1075 dr->dt.dl.dr_data = arc_alloc_buf(spa, db, type, size);
1078 dr->dt.dl.dr_data = arc_alloc_compressed_buf(spa, db,
1081 bcopy(db->db.db_data, dr->dt.dl.dr_data->b_data, size);
1214 dbuf_unoverride(dbuf_dirty_record_t *dr)
1216 dmu_buf_impl_t *db = dr->dr_dbuf;
1217 blkptr_t *bp = &dr->dt.dl.dr_overridden_by;
1218 uint64_t txg = dr->dr_txg;
1221 ASSERT(dr->dt.dl.dr_override_state != DR_IN_DMU_SYNC);
1225 dr->dt.dl.dr_override_state == DR_NOT_OVERRIDDEN)
1228 ASSERT(db->db_data_pending != dr);
1231 if (!BP_IS_HOLE(bp) && !dr->dt.dl.dr_nopwrite)
1234 dr->dt.dl.dr_override_state = DR_NOT_OVERRIDDEN;
1235 dr->dt.dl.dr_nopwrite = B_FALSE;
1245 arc_release(dr->dt.dl.dr_data, db);
1314 dbuf_dirty_record_t *dr = db->db_last_dirty;
1316 if (dr->dr_txg == txg) {
1325 dbuf_unoverride(dr);
1455 dbuf_redirty(dbuf_dirty_record_t *dr)
1457 dmu_buf_impl_t *db = dr->dr_dbuf;
1466 dbuf_unoverride(dr);
1481 dbuf_dirty_record_t **drp, *dr;
1560 while ((dr = *drp) != NULL && dr->dr_txg > tx->tx_txg)
1561 drp = &dr->dr_next;
1562 if (dr && dr->dr_txg == tx->tx_txg) {
1565 dbuf_redirty(dr);
1567 return (dr);
1621 dr = kmem_zalloc(sizeof (dbuf_dirty_record_t), KM_SLEEP);
1645 dr->dt.dl.dr_data = data_old;
1647 mutex_init(&dr->dt.di.dr_mtx, NULL, MUTEX_DEFAULT, NULL);
1648 list_create(&dr->dt.di.dr_children,
1653 dr->dr_accounted = db->db.db_size;
1654 dr->dr_dbuf = db;
1655 dr->dr_txg = tx->tx_txg;
1656 dr->dr_next = *drp;
1657 *drp = dr;
1687 ASSERT(!list_link_active(&dr->dr_dirty_node));
1688 list_insert_tail(&dn->dn_dirty_records[txgoff], dr);
1692 return (dr);
1752 if (db->db_last_dirty == dr ||
1756 ASSERT(!list_link_active(&dr->dr_dirty_node));
1757 list_insert_tail(&di->dt.di.dr_children, dr);
1759 dr->dr_parent = di;
1767 ASSERT(!list_link_active(&dr->dr_dirty_node));
1768 list_insert_tail(&dn->dn_dirty_records[txgoff], dr);
1776 return (dr);
1788 dbuf_dirty_record_t *dr, **drp;
1808 for (drp = &db->db_last_dirty; (dr = *drp) != NULL; drp = &dr->dr_next)
1809 if (dr->dr_txg <= txg)
1811 if (dr == NULL || dr->dr_txg < txg)
1813 ASSERT(dr->dr_txg == txg);
1814 ASSERT(dr->dr_dbuf == db);
1824 dr->dr_accounted, txg);
1826 *drp = dr->dr_next;
1834 if (dr->dr_parent) {
1835 mutex_enter(&dr->dr_parent->dt.di.dr_mtx);
1836 list_remove(&dr->dr_parent->dt.di.dr_children, dr);
1837 mutex_exit(&dr->dr_parent->dt.di.dr_mtx);
1842 list_remove(&dn->dn_dirty_records[txg & TXG_MASK], dr);
1848 dbuf_unoverride(dr);
1851 ASSERT(dr->dt.dl.dr_data != NULL);
1852 if (dr->dt.dl.dr_data != db->db_buf)
1853 arc_buf_destroy(dr->dt.dl.dr_data, db);
1856 kmem_free(dr, sizeof (dbuf_dirty_record_t));
1886 dbuf_dirty_record_t *dr;
1887 for (dr = db->db_last_dirty;
1888 dr != NULL && dr->dr_txg >= tx->tx_txg; dr = dr->dr_next) {
1894 if (dr->dr_txg == tx->tx_txg && db->db_state == DB_CACHED) {
1896 dbuf_redirty(dr);
2034 dbuf_dirty_record_t *dr = db->db_last_dirty;
2037 if (dr != NULL && dr->dr_txg == tx->tx_txg) {
2038 ASSERT(dr->dt.dl.dr_data == db->db_buf);
2040 ASSERT(dr->dt.dl.dr_override_state ==
2044 dr->dt.dl.dr_data = buf;
2046 } else if (dr == NULL || dr->dt.dl.dr_data != db->db_buf) {
2600 dbuf_dirty_record_t *dr = db->db_data_pending;
2602 if (dr->dt.dl.dr_data == db->db_buf) {
2608 bcopy(dr->dt.dl.dr_data->b_data, db->db.db_data,
3000 dbuf_sync_indirect(dbuf_dirty_record_t *dr, dmu_tx_t *tx)
3002 dmu_buf_impl_t *db = dr->dr_dbuf;
3032 db->db_data_pending = dr;
3035 dbuf_write(dr, db->db_buf, tx);
3037 zio = dr->dr_zio;
3038 mutex_enter(&dr->dt.di.dr_mtx);
3039 dbuf_sync_list(&dr->dt.di.dr_children, db->db_level - 1, tx);
3040 ASSERT(list_head(&dr->dt.di.dr_children) == NULL);
3041 mutex_exit(&dr->dt.di.dr_mtx);
3046 dbuf_sync_leaf(dbuf_dirty_record_t *dr, dmu_tx_t *tx)
3048 arc_buf_t **datap = &dr->dt.dl.dr_data;
3049 dmu_buf_impl_t *db = dr->dr_dbuf;
3068 ASSERT(db->db.db_data != dr->dt.dl.dr_data);
3104 while (*drp != dr)
3106 ASSERT(dr->dr_next == NULL);
3107 ASSERT(dr->dr_dbuf == db);
3108 *drp = dr->dr_next;
3109 kmem_free(dr, sizeof (dbuf_dirty_record_t));
3130 while (dr->dt.dl.dr_override_state == DR_IN_DMU_SYNC) {
3133 ASSERT(dr->dt.dl.dr_override_state != DR_NOT_OVERRIDDEN);
3139 dr->dt.dl.dr_override_state != DR_OVERRIDDEN &&
3166 db->db_data_pending = dr;
3170 dbuf_write(dr, *datap, tx);
3172 ASSERT(!list_link_active(&dr->dr_dirty_node));
3174 list_insert_tail(&dn->dn_dirty_records[txg&TXG_MASK], dr);
3185 zio_nowait(dr->dr_zio);
3192 dbuf_dirty_record_t *dr;
3194 while (dr = list_head(list)) {
3195 if (dr->dr_zio != NULL) {
3203 ASSERT3U(dr->dr_dbuf->db.db_object, ==,
3207 if (dr->dr_dbuf->db_blkid != DMU_BONUS_BLKID &&
3208 dr->dr_dbuf->db_blkid != DMU_SPILL_BLKID) {
3209 VERIFY3U(dr->dr_dbuf->db_level, ==, level);
3211 list_remove(list, dr);
3212 if (dr->dr_dbuf->db_level > 0)
3213 dbuf_sync_indirect(dr, tx);
3215 dbuf_sync_leaf(dr, tx);
3363 dbuf_dirty_record_t *dr;
3366 dr = db->db_data_pending;
3367 ASSERT3U(dr->dr_txg, ==, zio->io_txg);
3375 delta = dr->dr_accounted / zio->io_phys_children;
3388 dbuf_dirty_record_t **drp, *dr;
3410 while ((dr = *drp) != db->db_data_pending)
3411 drp = &dr->dr_next;
3412 ASSERT(!list_link_active(&dr->dr_dirty_node));
3413 ASSERT(dr->dr_dbuf == db);
3414 ASSERT(dr->dr_next == NULL);
3415 *drp = dr->dr_next;
3432 ASSERT(dr->dt.dl.dr_override_state == DR_NOT_OVERRIDDEN);
3434 if (dr->dt.dl.dr_data != db->db_buf)
3435 arc_buf_destroy(dr->dt.dl.dr_data, db);
3442 ASSERT(list_head(&dr->dt.di.dr_children) == NULL);
3453 mutex_destroy(&dr->dt.di.dr_mtx);
3454 list_destroy(&dr->dt.di.dr_children);
3456 kmem_free(dr, sizeof (dbuf_dirty_record_t));
3480 dbuf_dirty_record_t *dr = zio->io_private;
3481 dmu_buf_impl_t *db = dr->dr_dbuf;
3489 dbuf_dirty_record_t *dr = zio->io_private;
3490 dmu_buf_impl_t *db = dr->dr_dbuf;
3491 blkptr_t *obp = &dr->dt.dl.dr_overridden_by;
3497 arc_release(dr->dt.dl.dr_data, db);
3506 dbuf_write(dbuf_dirty_record_t *dr, arc_buf_t *data, dmu_tx_t *tx)
3508 dmu_buf_impl_t *db = dr->dr_dbuf;
3586 dr->dr_bp_copy = *db->db_blkptr;
3589 dr->dt.dl.dr_override_state == DR_OVERRIDDEN) {
3596 dr->dr_zio = zio_write(zio, os->os_spa, txg, &dr->dr_bp_copy,
3600 dr, ZIO_PRIORITY_ASYNC_WRITE, ZIO_FLAG_MUSTSUCCEED, &zb);
3602 dr->dt.dl.dr_override_state = DR_NOT_OVERRIDDEN;
3603 zio_write_override(dr->dr_zio, &dr->dt.dl.dr_overridden_by,
3604 dr->dt.dl.dr_copies, dr->dt.dl.dr_nopwrite);
3609 dr->dr_zio = zio_write(zio, os->os_spa, txg,
3610 &dr->dr_bp_copy, NULL, db->db.db_size, db->db.db_size, &zp,
3627 dr->dr_zio = arc_write(zio, os->os_spa, txg,
3628 &dr->dr_bp_copy, data, DBUF_IS_L2CACHEABLE(db),