Lines Matching full:dr

55 static void dbuf_write(dbuf_dirty_record_t *dr, arc_buf_t *data, dmu_tx_t *tx);
722 dbuf_dirty_record_t *dr; in dbuf_verify() local
754 for (dr = db->db_data_pending; dr != NULL; dr = dr->dr_next) in dbuf_verify()
755 ASSERT(dr->dr_dbuf == db); in dbuf_verify()
757 for (dr = db->db_last_dirty; dr != NULL; dr = dr->dr_next) in dbuf_verify()
758 ASSERT(dr->dr_dbuf == db); in dbuf_verify()
766 dr = db->db_data_pending; in dbuf_verify()
771 ASSERT(dr == NULL || dr->dt.dl.dr_data == db->db_buf); in dbuf_verify()
1249 dbuf_dirty_record_t *dr = db->db_last_dirty; in dbuf_fix_old_data() local
1256 if (dr == NULL || in dbuf_fix_old_data()
1257 (dr->dt.dl.dr_data != in dbuf_fix_old_data()
1268 ASSERT3U(dr->dr_txg, >=, txg - 2); in dbuf_fix_old_data()
1273 dr->dt.dl.dr_data = zio_buf_alloc(bonuslen); in dbuf_fix_old_data()
1275 bcopy(db->db.db_data, dr->dt.dl.dr_data, bonuslen); in dbuf_fix_old_data()
1292 dr->dt.dl.dr_data = arc_alloc_raw_buf(spa, db, in dbuf_fix_old_data()
1298 dr->dt.dl.dr_data = arc_alloc_compressed_buf(spa, db, in dbuf_fix_old_data()
1301 dr->dt.dl.dr_data = arc_alloc_buf(spa, db, type, size); in dbuf_fix_old_data()
1303 bcopy(db->db.db_data, dr->dt.dl.dr_data->b_data, size); in dbuf_fix_old_data()
1464 dbuf_unoverride(dbuf_dirty_record_t *dr) in dbuf_unoverride() argument
1466 dmu_buf_impl_t *db = dr->dr_dbuf; in dbuf_unoverride()
1467 blkptr_t *bp = &dr->dt.dl.dr_overridden_by; in dbuf_unoverride()
1468 uint64_t txg = dr->dr_txg; in dbuf_unoverride()
1476 ASSERT(dr->dt.dl.dr_override_state != DR_IN_DMU_SYNC); in dbuf_unoverride()
1480 dr->dt.dl.dr_override_state == DR_NOT_OVERRIDDEN) in dbuf_unoverride()
1483 ASSERT(db->db_data_pending != dr); in dbuf_unoverride()
1486 if (!BP_IS_HOLE(bp) && !dr->dt.dl.dr_nopwrite) in dbuf_unoverride()
1489 dr->dt.dl.dr_override_state = DR_NOT_OVERRIDDEN; in dbuf_unoverride()
1490 dr->dt.dl.dr_nopwrite = B_FALSE; in dbuf_unoverride()
1491 dr->dt.dl.dr_has_raw_params = B_FALSE; in dbuf_unoverride()
1501 arc_release(dr->dt.dl.dr_data, db); in dbuf_unoverride()
1570 dbuf_dirty_record_t *dr = db->db_last_dirty; in dbuf_free_range() local
1572 if (dr->dr_txg == txg) { in dbuf_free_range()
1581 dbuf_unoverride(dr); in dbuf_free_range()
1669 dbuf_redirty(dbuf_dirty_record_t *dr) in dbuf_redirty() argument
1671 dmu_buf_impl_t *db = dr->dr_dbuf; in dbuf_redirty()
1680 dbuf_unoverride(dr); in dbuf_redirty()
1695 dbuf_dirty_record_t **drp, *dr; in dbuf_dirty() local
1776 while ((dr = *drp) != NULL && dr->dr_txg > tx->tx_txg) in dbuf_dirty()
1777 drp = &dr->dr_next; in dbuf_dirty()
1778 if (dr && dr->dr_txg == tx->tx_txg) { in dbuf_dirty()
1781 dbuf_redirty(dr); in dbuf_dirty()
1783 return (dr); in dbuf_dirty()
1825 dr = kmem_zalloc(sizeof (dbuf_dirty_record_t), KM_SLEEP); in dbuf_dirty()
1849 dr->dt.dl.dr_data = data_old; in dbuf_dirty()
1851 mutex_init(&dr->dt.di.dr_mtx, NULL, MUTEX_DEFAULT, NULL); in dbuf_dirty()
1852 list_create(&dr->dt.di.dr_children, in dbuf_dirty()
1857 dr->dr_accounted = db->db.db_size; in dbuf_dirty()
1858 dr->dr_dbuf = db; in dbuf_dirty()
1859 dr->dr_txg = tx->tx_txg; in dbuf_dirty()
1860 dr->dr_next = *drp; in dbuf_dirty()
1861 *drp = dr; in dbuf_dirty()
1891 ASSERT(!list_link_active(&dr->dr_dirty_node)); in dbuf_dirty()
1892 list_insert_tail(&dn->dn_dirty_records[txgoff], dr); in dbuf_dirty()
1896 return (dr); in dbuf_dirty()
1959 if (db->db_last_dirty == dr || in dbuf_dirty()
1963 ASSERT(!list_link_active(&dr->dr_dirty_node)); in dbuf_dirty()
1964 list_insert_tail(&di->dt.di.dr_children, dr); in dbuf_dirty()
1966 dr->dr_parent = di; in dbuf_dirty()
1974 ASSERT(!list_link_active(&dr->dr_dirty_node)); in dbuf_dirty()
1975 list_insert_tail(&dn->dn_dirty_records[txgoff], dr); in dbuf_dirty()
1983 return (dr); in dbuf_dirty()
1995 dbuf_dirty_record_t *dr, **drp; in dbuf_undirty() local
2015 for (drp = &db->db_last_dirty; (dr = *drp) != NULL; drp = &dr->dr_next) in dbuf_undirty()
2016 if (dr->dr_txg <= txg) in dbuf_undirty()
2018 if (dr == NULL || dr->dr_txg < txg) in dbuf_undirty()
2020 ASSERT(dr->dr_txg == txg); in dbuf_undirty()
2021 ASSERT(dr->dr_dbuf == db); in dbuf_undirty()
2031 dr->dr_accounted, txg); in dbuf_undirty()
2033 *drp = dr->dr_next; in dbuf_undirty()
2041 if (dr->dr_parent) { in dbuf_undirty()
2042 mutex_enter(&dr->dr_parent->dt.di.dr_mtx); in dbuf_undirty()
2043 list_remove(&dr->dr_parent->dt.di.dr_children, dr); in dbuf_undirty()
2044 mutex_exit(&dr->dr_parent->dt.di.dr_mtx); in dbuf_undirty()
2049 list_remove(&dn->dn_dirty_records[txg & TXG_MASK], dr); in dbuf_undirty()
2055 dbuf_unoverride(dr); in dbuf_undirty()
2058 ASSERT(dr->dt.dl.dr_data != NULL); in dbuf_undirty()
2059 if (dr->dt.dl.dr_data != db->db_buf) in dbuf_undirty()
2060 arc_buf_destroy(dr->dt.dl.dr_data, db); in dbuf_undirty()
2063 kmem_free(dr, sizeof (dbuf_dirty_record_t)); in dbuf_undirty()
2092 dbuf_dirty_record_t *dr; in dmu_buf_will_dirty_impl() local
2093 for (dr = db->db_last_dirty; in dmu_buf_will_dirty_impl()
2094 dr != NULL && dr->dr_txg >= tx->tx_txg; dr = dr->dr_next) { in dmu_buf_will_dirty_impl()
2100 if (dr->dr_txg == tx->tx_txg && db->db_state == DB_CACHED) { in dmu_buf_will_dirty_impl()
2102 dbuf_redirty(dr); in dmu_buf_will_dirty_impl()
2163 dbuf_dirty_record_t *dr; in dmu_buf_set_crypt_params() local
2175 dr = db->db_last_dirty; in dmu_buf_set_crypt_params()
2176 while (dr != NULL && dr->dr_txg > tx->tx_txg) in dmu_buf_set_crypt_params()
2177 dr = dr->dr_next; in dmu_buf_set_crypt_params()
2179 ASSERT3P(dr, !=, NULL); in dmu_buf_set_crypt_params()
2180 ASSERT3U(dr->dr_txg, ==, tx->tx_txg); in dmu_buf_set_crypt_params()
2182 dr->dt.dl.dr_has_raw_params = B_TRUE; in dmu_buf_set_crypt_params()
2183 dr->dt.dl.dr_byteorder = byteorder; in dmu_buf_set_crypt_params()
2184 bcopy(salt, dr->dt.dl.dr_salt, ZIO_DATA_SALT_LEN); in dmu_buf_set_crypt_params()
2185 bcopy(iv, dr->dt.dl.dr_iv, ZIO_DATA_IV_LEN); in dmu_buf_set_crypt_params()
2186 bcopy(mac, dr->dt.dl.dr_mac, ZIO_DATA_MAC_LEN); in dmu_buf_set_crypt_params()
2292 dbuf_dirty_record_t *dr = db->db_last_dirty; in dbuf_assign_arcbuf() local
2295 if (dr != NULL && dr->dr_txg == tx->tx_txg) { in dbuf_assign_arcbuf()
2296 ASSERT(dr->dt.dl.dr_data == db->db_buf); in dbuf_assign_arcbuf()
2299 ASSERT(dr->dt.dl.dr_override_state == in dbuf_assign_arcbuf()
2303 dr->dt.dl.dr_data = buf; in dbuf_assign_arcbuf()
2305 } else if (dr == NULL || dr->dt.dl.dr_data != db->db_buf) { in dbuf_assign_arcbuf()
2908 dbuf_hold_copy(dnode_t *dn, dmu_buf_impl_t *db, dbuf_dirty_record_t *dr) in dbuf_hold_copy() argument
2910 arc_buf_t *data = dr->dt.dl.dr_data; in dbuf_hold_copy()
3001 dbuf_dirty_record_t *dr = db->db_data_pending; in dbuf_hold_impl() local
3002 if (dr->dt.dl.dr_data == db->db_buf) in dbuf_hold_impl()
3003 dbuf_hold_copy(dn, db, dr); in dbuf_hold_impl()
3423 dbuf_prepare_encrypted_dnode_leaf(dbuf_dirty_record_t *dr) in dbuf_prepare_encrypted_dnode_leaf() argument
3426 dmu_buf_impl_t *db = dr->dr_dbuf; in dbuf_prepare_encrypted_dnode_leaf()
3448 } else if (dr->dt.dl.dr_has_raw_params) { in dbuf_prepare_encrypted_dnode_leaf()
3449 (void) arc_release(dr->dt.dl.dr_data, db); in dbuf_prepare_encrypted_dnode_leaf()
3450 arc_convert_to_raw(dr->dt.dl.dr_data, in dbuf_prepare_encrypted_dnode_leaf()
3452 dr->dt.dl.dr_byteorder, DMU_OT_DNODE, in dbuf_prepare_encrypted_dnode_leaf()
3453 dr->dt.dl.dr_salt, dr->dt.dl.dr_iv, dr->dt.dl.dr_mac); in dbuf_prepare_encrypted_dnode_leaf()
3458 dbuf_sync_indirect(dbuf_dirty_record_t *dr, dmu_tx_t *tx) in dbuf_sync_indirect() argument
3460 dmu_buf_impl_t *db = dr->dr_dbuf; in dbuf_sync_indirect()
3490 db->db_data_pending = dr; in dbuf_sync_indirect()
3494 dbuf_write(dr, db->db_buf, tx); in dbuf_sync_indirect()
3496 zio = dr->dr_zio; in dbuf_sync_indirect()
3497 mutex_enter(&dr->dt.di.dr_mtx); in dbuf_sync_indirect()
3498 dbuf_sync_list(&dr->dt.di.dr_children, db->db_level - 1, tx); in dbuf_sync_indirect()
3499 ASSERT(list_head(&dr->dt.di.dr_children) == NULL); in dbuf_sync_indirect()
3500 mutex_exit(&dr->dt.di.dr_mtx); in dbuf_sync_indirect()
3505 dbuf_sync_leaf(dbuf_dirty_record_t *dr, dmu_tx_t *tx) in dbuf_sync_leaf() argument
3507 arc_buf_t **datap = &dr->dt.dl.dr_data; in dbuf_sync_leaf()
3508 dmu_buf_impl_t *db = dr->dr_dbuf; in dbuf_sync_leaf()
3527 ASSERT(db->db.db_data != dr->dt.dl.dr_data); in dbuf_sync_leaf()
3567 while (*drp != dr) in dbuf_sync_leaf()
3569 ASSERT(dr->dr_next == NULL); in dbuf_sync_leaf()
3570 ASSERT(dr->dr_dbuf == db); in dbuf_sync_leaf()
3571 *drp = dr->dr_next; in dbuf_sync_leaf()
3572 kmem_free(dr, sizeof (dbuf_dirty_record_t)); in dbuf_sync_leaf()
3593 while (dr->dt.dl.dr_override_state == DR_IN_DMU_SYNC) { in dbuf_sync_leaf()
3596 ASSERT(dr->dt.dl.dr_override_state != DR_NOT_OVERRIDDEN); in dbuf_sync_leaf()
3604 dbuf_prepare_encrypted_dnode_leaf(dr); in dbuf_sync_leaf()
3609 dr->dt.dl.dr_override_state != DR_OVERRIDDEN && in dbuf_sync_leaf()
3646 db->db_data_pending = dr; in dbuf_sync_leaf()
3650 dbuf_write(dr, *datap, tx); in dbuf_sync_leaf()
3652 ASSERT(!list_link_active(&dr->dr_dirty_node)); in dbuf_sync_leaf()
3654 list_insert_tail(&dn->dn_dirty_records[txg&TXG_MASK], dr); in dbuf_sync_leaf()
3665 zio_nowait(dr->dr_zio); in dbuf_sync_leaf()
3672 dbuf_dirty_record_t *dr; in dbuf_sync_list() local
3674 while (dr = list_head(list)) { in dbuf_sync_list()
3675 if (dr->dr_zio != NULL) { in dbuf_sync_list()
3683 ASSERT3U(dr->dr_dbuf->db.db_object, ==, in dbuf_sync_list()
3687 if (dr->dr_dbuf->db_blkid != DMU_BONUS_BLKID && in dbuf_sync_list()
3688 dr->dr_dbuf->db_blkid != DMU_SPILL_BLKID) { in dbuf_sync_list()
3689 VERIFY3U(dr->dr_dbuf->db_level, ==, level); in dbuf_sync_list()
3691 list_remove(list, dr); in dbuf_sync_list()
3692 if (dr->dr_dbuf->db_level > 0) in dbuf_sync_list()
3693 dbuf_sync_indirect(dr, tx); in dbuf_sync_list()
3695 dbuf_sync_leaf(dr, tx); in dbuf_sync_list()
3851 dbuf_dirty_record_t *dr; in dbuf_write_physdone() local
3854 dr = db->db_data_pending; in dbuf_write_physdone()
3855 ASSERT3U(dr->dr_txg, ==, zio->io_txg); in dbuf_write_physdone()
3863 delta = dr->dr_accounted / zio->io_phys_children; in dbuf_write_physdone()
3876 dbuf_dirty_record_t **drp, *dr; in dbuf_write_done() local
3898 while ((dr = *drp) != db->db_data_pending) in dbuf_write_done()
3899 drp = &dr->dr_next; in dbuf_write_done()
3900 ASSERT(!list_link_active(&dr->dr_dirty_node)); in dbuf_write_done()
3901 ASSERT(dr->dr_dbuf == db); in dbuf_write_done()
3902 ASSERT(dr->dr_next == NULL); in dbuf_write_done()
3903 *drp = dr->dr_next; in dbuf_write_done()
3920 ASSERT(dr->dt.dl.dr_override_state == DR_NOT_OVERRIDDEN); in dbuf_write_done()
3922 if (dr->dt.dl.dr_data != db->db_buf) in dbuf_write_done()
3923 arc_buf_destroy(dr->dt.dl.dr_data, db); in dbuf_write_done()
3930 ASSERT(list_head(&dr->dt.di.dr_children) == NULL); in dbuf_write_done()
3941 mutex_destroy(&dr->dt.di.dr_mtx); in dbuf_write_done()
3942 list_destroy(&dr->dt.di.dr_children); in dbuf_write_done()
3944 kmem_free(dr, sizeof (dbuf_dirty_record_t)); in dbuf_write_done()
3968 dbuf_dirty_record_t *dr = zio->io_private; in dbuf_write_override_ready() local
3969 dmu_buf_impl_t *db = dr->dr_dbuf; in dbuf_write_override_ready()
3977 dbuf_dirty_record_t *dr = zio->io_private; in dbuf_write_override_done() local
3978 dmu_buf_impl_t *db = dr->dr_dbuf; in dbuf_write_override_done()
3979 blkptr_t *obp = &dr->dt.dl.dr_overridden_by; in dbuf_write_override_done()
3985 arc_release(dr->dt.dl.dr_data, db); in dbuf_write_override_done()
4136 dbuf_write(dbuf_dirty_record_t *dr, arc_buf_t *data, dmu_tx_t *tx) in dbuf_write() argument
4138 dmu_buf_impl_t *db = dr->dr_dbuf; in dbuf_write()
4216 dr->dr_bp_copy = *db->db_blkptr; in dbuf_write()
4219 dr->dt.dl.dr_override_state == DR_OVERRIDDEN) { in dbuf_write()
4227 dr->dr_zio = zio_write(zio, os->os_spa, txg, &dr->dr_bp_copy, in dbuf_write()
4231 dr, ZIO_PRIORITY_ASYNC_WRITE, ZIO_FLAG_MUSTSUCCEED, &zb); in dbuf_write()
4233 dr->dt.dl.dr_override_state = DR_NOT_OVERRIDDEN; in dbuf_write()
4234 zio_write_override(dr->dr_zio, &dr->dt.dl.dr_overridden_by, in dbuf_write()
4235 dr->dt.dl.dr_copies, dr->dt.dl.dr_nopwrite); in dbuf_write()
4240 dr->dr_zio = zio_write(zio, os->os_spa, txg, in dbuf_write()
4241 &dr->dr_bp_copy, NULL, db->db.db_size, db->db.db_size, &zp, in dbuf_write()
4258 dr->dr_zio = arc_write(zio, os->os_spa, txg, in dbuf_write()
4259 &dr->dr_bp_copy, data, DBUF_IS_L2CACHEABLE(db), in dbuf_write()