Lines Matching full:dn

374 	dnode_t *dn;  in dbuf_find_bonus()  local
377 if (dnode_hold(os, object, FTAG, &dn) == 0) { in dbuf_find_bonus()
378 rw_enter(&dn->dn_struct_rwlock, RW_READER); in dbuf_find_bonus()
379 if (dn->dn_bonus != NULL) { in dbuf_find_bonus()
380 db = dn->dn_bonus; in dbuf_find_bonus()
383 rw_exit(&dn->dn_struct_rwlock); in dbuf_find_bonus()
384 dnode_rele(dn, FTAG); in dbuf_find_bonus()
667 dnode_level_is_l2cacheable(blkptr_t *bp, dnode_t *dn, int64_t level) in dnode_level_is_l2cacheable() argument
669 if (dn->dn_objset->os_secondary_cache == ZFS_CACHE_ALL || in dnode_level_is_l2cacheable()
670 (dn->dn_objset->os_secondary_cache == ZFS_CACHE_METADATA && in dnode_level_is_l2cacheable()
672 DMU_OT_IS_METADATA(dn->dn_handle->dnh_dnode->dn_type)))) { in dnode_level_is_l2cacheable()
679 vdev_t *rvd = dn->dn_objset->os_spa->spa_root_vdev; in dnode_level_is_l2cacheable()
1097 dnode_t *dn; in dbuf_verify() local
1108 dn = DB_DNODE(db); in dbuf_verify()
1109 if (dn == NULL) { in dbuf_verify()
1113 ASSERT3U(db->db.db_object, ==, dn->dn_object); in dbuf_verify()
1114 ASSERT3P(db->db_objset, ==, dn->dn_objset); in dbuf_verify()
1115 ASSERT3U(db->db_level, <, dn->dn_nlevels); in dbuf_verify()
1118 !avl_is_empty(&dn->dn_dbufs)); in dbuf_verify()
1121 ASSERT(dn != NULL); in dbuf_verify()
1122 ASSERT3U(db->db.db_size, >=, dn->dn_bonuslen); in dbuf_verify()
1125 ASSERT(dn != NULL); in dbuf_verify()
1158 if (db->db_parent == dn->dn_dbuf) { in dbuf_verify()
1160 /* ASSERT3U(db->db_blkid, <, dn->dn_nblkptr); */ in dbuf_verify()
1167 &dn->dn_phys->dn_blkptr[db->db_blkid]); in dbuf_verify()
1190 db->db_state != DB_FILL && (dn == NULL || !dn->dn_free_txg)) { in dbuf_verify()
1309 dbuf_whichblock(const dnode_t *dn, const int64_t level, const uint64_t offset) in dbuf_whichblock() argument
1311 if (dn->dn_datablkshift != 0 && dn->dn_indblkshift != 0) { in dbuf_whichblock()
1332 const unsigned exp = dn->dn_datablkshift + in dbuf_whichblock()
1333 level * (dn->dn_indblkshift - SPA_BLKPTRSHIFT); in dbuf_whichblock()
1337 ASSERT3U(level, ==, dn->dn_nlevels - 1); in dbuf_whichblock()
1345 ASSERT3U(offset, <, dn->dn_datablksz); in dbuf_whichblock()
1438 dbuf_read_bonus(dmu_buf_impl_t *db, dnode_t *dn) in dbuf_read_bonus() argument
1442 bonuslen = MIN(dn->dn_bonuslen, dn->dn_phys->dn_bonuslen); in dbuf_read_bonus()
1443 max_bonuslen = DN_SLOTS_TO_BONUSLEN(dn->dn_num_slots); in dbuf_read_bonus()
1452 memcpy(db->db.db_data, DN_BONUS(dn->dn_phys), bonuslen); in dbuf_read_bonus()
1459 dbuf_handle_indirect_hole(dmu_buf_impl_t *db, dnode_t *dn, blkptr_t *dbbp) in dbuf_handle_indirect_hole() argument
1462 uint32_t indbs = 1ULL << dn->dn_indblkshift; in dbuf_handle_indirect_hole()
1470 dn->dn_datablksz : BP_GET_LSIZE(dbbp)); in dbuf_handle_indirect_hole()
1483 dbuf_read_hole(dmu_buf_impl_t *db, dnode_t *dn, blkptr_t *bp) in dbuf_read_hole() argument
1495 is_hole = dnode_block_freed(dn, db->db_blkid) || BP_IS_HOLE(bp); in dbuf_read_hole()
1503 dbuf_handle_indirect_hole(db, dn, bp); in dbuf_read_hole()
1525 dbuf_read_verify_dnode_crypt(dmu_buf_impl_t *db, dnode_t *dn, uint32_t flags) in dbuf_read_verify_dnode_crypt() argument
1535 (dndb = dn->dn_dbuf) == NULL) in dbuf_read_verify_dnode_crypt()
1572 !DMU_OT_IS_ENCRYPTED(dn->dn_type)) || in dbuf_read_verify_dnode_crypt()
1574 !DMU_OT_IS_ENCRYPTED(dn->dn_bonustype)))) in dbuf_read_verify_dnode_crypt()
1587 dbuf_read_impl(dmu_buf_impl_t *db, dnode_t *dn, zio_t *zio, uint32_t flags, in dbuf_read_impl() argument
1602 err = dbuf_read_bonus(db, dn); in dbuf_read_impl()
1606 err = dbuf_read_hole(db, dn, bp); in dbuf_read_impl()
1712 dnode_t *dn = DB_DNODE(db); in dbuf_fix_old_data() local
1713 int bonuslen = DN_SLOTS_TO_BONUSLEN(dn->dn_num_slots); in dbuf_fix_old_data()
1718 dnode_t *dn = DB_DNODE(db); in dbuf_fix_old_data() local
1735 dmu_objset_id(dn->dn_objset), byteorder, salt, iv, in dbuf_fix_old_data()
1736 mac, dn->dn_type, size, arc_buf_lsize(db->db_buf), in dbuf_fix_old_data()
1756 dnode_t *dn; in dbuf_read() local
1763 dn = DB_DNODE(db); in dbuf_read()
1769 err = dbuf_read_verify_dnode_crypt(db, dn, flags); in dbuf_read()
1824 spa_t *spa = dn->dn_objset->os_spa; in dbuf_read()
1850 spa_t *spa = dn->dn_objset->os_spa; in dbuf_read()
1857 dbuf_read_impl(db, dn, pio, flags, dblt, bp, FTAG); in dbuf_read()
1867 dmu_zfetch(&dn->dn_zfetch, db->db_blkid, 1, B_TRUE, miss, in dbuf_read()
1979 dbuf_free_range(dnode_t *dn, uint64_t start_blkid, uint64_t end_blkid, in dbuf_free_range() argument
1988 if (end_blkid > dn->dn_maxblkid && in dbuf_free_range()
1990 end_blkid = dn->dn_maxblkid; in dbuf_free_range()
1991 dprintf_dnode(dn, "start=%llu end=%llu\n", (u_longlong_t)start_blkid, in dbuf_free_range()
1999 mutex_enter(&dn->dn_dbufs_mtx); in dbuf_free_range()
2000 db = avl_find(&dn->dn_dbufs, db_search, &where); in dbuf_free_range()
2003 db = avl_nearest(&dn->dn_dbufs, where, AVL_AFTER); in dbuf_free_range()
2006 db_next = AVL_NEXT(&dn->dn_dbufs, db); in dbuf_free_range()
2050 db->db_blkid > dn->dn_maxblkid) in dbuf_free_range()
2051 dn->dn_maxblkid = db->db_blkid; in dbuf_free_range()
2076 mutex_exit(&dn->dn_dbufs_mtx); in dbuf_free_range()
2087 dnode_t *dn; in dbuf_new_size() local
2092 dn = DB_DNODE(db); in dbuf_new_size()
2103 buf = arc_alloc_buf(dn->dn_objset->os_spa, db, type, size); in dbuf_new_size()
2127 dmu_objset_willuse_space(dn->dn_objset, size - osize, tx); in dbuf_new_size()
2171 dbuf_dirty_lightweight(dnode_t *dn, uint64_t blkid, dmu_tx_t *tx) in dbuf_dirty_lightweight() argument
2173 rw_enter(&dn->dn_struct_rwlock, RW_READER); in dbuf_dirty_lightweight()
2174 IMPLY(dn->dn_objset->os_raw_receive, dn->dn_maxblkid >= blkid); in dbuf_dirty_lightweight()
2175 dnode_new_blkid(dn, blkid, tx, B_TRUE, B_FALSE); in dbuf_dirty_lightweight()
2176 ASSERT(dn->dn_maxblkid >= blkid); in dbuf_dirty_lightweight()
2181 dr->dr_dnode = dn; in dbuf_dirty_lightweight()
2184 dr->dr_accounted = dn->dn_datablksz; in dbuf_dirty_lightweight()
2191 ASSERT3P(NULL, ==, dbuf_find(dn->dn_objset, dn->dn_object, 0, blkid, in dbuf_dirty_lightweight()
2194 mutex_enter(&dn->dn_mtx); in dbuf_dirty_lightweight()
2196 if (dn->dn_free_ranges[txgoff] != NULL) { in dbuf_dirty_lightweight()
2197 zfs_range_tree_clear(dn->dn_free_ranges[txgoff], blkid, 1); in dbuf_dirty_lightweight()
2200 if (dn->dn_nlevels == 1) { in dbuf_dirty_lightweight()
2201 ASSERT3U(blkid, <, dn->dn_nblkptr); in dbuf_dirty_lightweight()
2202 list_insert_tail(&dn->dn_dirty_records[txgoff], dr); in dbuf_dirty_lightweight()
2203 mutex_exit(&dn->dn_mtx); in dbuf_dirty_lightweight()
2204 rw_exit(&dn->dn_struct_rwlock); in dbuf_dirty_lightweight()
2205 dnode_setdirty(dn, tx); in dbuf_dirty_lightweight()
2207 mutex_exit(&dn->dn_mtx); in dbuf_dirty_lightweight()
2209 int epbs = dn->dn_indblkshift - SPA_BLKPTRSHIFT; in dbuf_dirty_lightweight()
2210 dmu_buf_impl_t *parent_db = dbuf_hold_level(dn, in dbuf_dirty_lightweight()
2212 rw_exit(&dn->dn_struct_rwlock); in dbuf_dirty_lightweight()
2234 dmu_objset_willuse_space(dn->dn_objset, dr->dr_accounted, tx); in dbuf_dirty_lightweight()
2242 dnode_t *dn; in dbuf_dirty() local
2253 dn = DB_DNODE(db); in dbuf_dirty()
2260 if (dn->dn_objset->os_dsl_dataset != NULL) { in dbuf_dirty()
2261 rrw_enter(&dn->dn_objset->os_dsl_dataset->ds_bp_rwlock, in dbuf_dirty()
2265 BP_IS_HOLE(dn->dn_objset->os_rootbp) || in dbuf_dirty()
2266 DMU_OBJECT_IS_SPECIAL(dn->dn_object) || in dbuf_dirty()
2267 dn->dn_objset->os_dsl_dataset == NULL); in dbuf_dirty()
2268 if (dn->dn_objset->os_dsl_dataset != NULL) in dbuf_dirty()
2269 rrw_exit(&dn->dn_objset->os_dsl_dataset->ds_bp_rwlock, FTAG); in dbuf_dirty()
2276 ASSERT(dn->dn_object == DMU_META_DNODE_OBJECT || in dbuf_dirty()
2277 dn->dn_dirtyctx == DN_UNDIRTIED || dn->dn_dirtyctx == in dbuf_dirty()
2290 mutex_enter(&dn->dn_mtx); in dbuf_dirty()
2291 dnode_set_dirtyctx(dn, tx, db); in dbuf_dirty()
2292 if (tx->tx_txg > dn->dn_dirty_txg) in dbuf_dirty()
2293 dn->dn_dirty_txg = tx->tx_txg; in dbuf_dirty()
2294 mutex_exit(&dn->dn_mtx); in dbuf_dirty()
2297 dn->dn_have_spill = B_TRUE; in dbuf_dirty()
2317 ASSERT(dn->dn_object == 0 || in dbuf_dirty()
2318 dn->dn_dirtyctx == DN_UNDIRTIED || dn->dn_dirtyctx == in dbuf_dirty()
2321 ASSERT3U(dn->dn_nlevels, >, db->db_level); in dbuf_dirty()
2330 os = dn->dn_objset; in dbuf_dirty()
2333 if (dn->dn_objset->os_dsl_dataset != NULL) in dbuf_dirty()
2335 ASSERT(!dmu_tx_is_syncing(tx) || DMU_OBJECT_IS_SPECIAL(dn->dn_object) || in dbuf_dirty()
2337 if (dn->dn_objset->os_dsl_dataset != NULL) in dbuf_dirty()
2357 dr->dr_dnode = dn; in dbuf_dirty()
2402 mutex_enter(&dn->dn_mtx); in dbuf_dirty()
2403 if (dn->dn_free_ranges[txgoff] != NULL) { in dbuf_dirty()
2404 zfs_range_tree_clear(dn->dn_free_ranges[txgoff], in dbuf_dirty()
2407 mutex_exit(&dn->dn_mtx); in dbuf_dirty()
2422 mutex_enter(&dn->dn_mtx); in dbuf_dirty()
2424 list_insert_tail(&dn->dn_dirty_records[txgoff], dr); in dbuf_dirty()
2425 mutex_exit(&dn->dn_mtx); in dbuf_dirty()
2426 dnode_setdirty(dn, tx); in dbuf_dirty()
2431 if (!RW_WRITE_HELD(&dn->dn_struct_rwlock)) { in dbuf_dirty()
2432 rw_enter(&dn->dn_struct_rwlock, RW_READER); in dbuf_dirty()
2452 ASSERT((dn->dn_phys->dn_nlevels == 0 && db->db_level == 0) || in dbuf_dirty()
2453 dn->dn_phys->dn_nlevels > db->db_level || in dbuf_dirty()
2454 dn->dn_next_nlevels[txgoff] > db->db_level || in dbuf_dirty()
2455 dn->dn_next_nlevels[(tx->tx_txg-1) & TXG_MASK] > db->db_level || in dbuf_dirty()
2456 dn->dn_next_nlevels[(tx->tx_txg-2) & TXG_MASK] > db->db_level); in dbuf_dirty()
2461 dn->dn_maxblkid >= db->db_blkid); in dbuf_dirty()
2462 dnode_new_blkid(dn, db->db_blkid, tx, in dbuf_dirty()
2464 ASSERT(dn->dn_maxblkid >= db->db_blkid); in dbuf_dirty()
2467 if (db->db_level+1 < dn->dn_nlevels) { in dbuf_dirty()
2472 if (db->db_parent == NULL || db->db_parent == dn->dn_dbuf) { in dbuf_dirty()
2473 int epbs = dn->dn_indblkshift - SPA_BLKPTRSHIFT; in dbuf_dirty()
2474 parent = dbuf_hold_level(dn, db->db_level + 1, in dbuf_dirty()
2480 rw_exit(&dn->dn_struct_rwlock); in dbuf_dirty()
2492 dn->dn_object == DMU_META_DNODE_OBJECT) { in dbuf_dirty()
2502 ASSERT(db->db_level + 1 == dn->dn_nlevels); in dbuf_dirty()
2503 ASSERT(db->db_blkid < dn->dn_nblkptr); in dbuf_dirty()
2504 ASSERT(db->db_parent == NULL || db->db_parent == dn->dn_dbuf); in dbuf_dirty()
2505 mutex_enter(&dn->dn_mtx); in dbuf_dirty()
2507 list_insert_tail(&dn->dn_dirty_records[txgoff], dr); in dbuf_dirty()
2508 mutex_exit(&dn->dn_mtx); in dbuf_dirty()
2510 rw_exit(&dn->dn_struct_rwlock); in dbuf_dirty()
2513 dnode_setdirty(dn, tx); in dbuf_dirty()
2524 struct dnode *dn = dr->dr_dnode; in dbuf_undirty_bonus() local
2525 int max_bonuslen = DN_SLOTS_TO_BONUSLEN(dn->dn_num_slots); in dbuf_undirty_bonus()
2591 dnode_t *dn = dr->dr_dnode; in dbuf_undirty() local
2597 dsl_pool_undirty_space(dmu_objset_pool(dn->dn_objset), in dbuf_undirty()
2613 db->db_level + 1 == dn->dn_nlevels) { in dbuf_undirty()
2614 ASSERT(db->db_blkptr == NULL || db->db_parent == dn->dn_dbuf); in dbuf_undirty()
2615 mutex_enter(&dn->dn_mtx); in dbuf_undirty()
2616 list_remove(&dn->dn_dirty_records[txg & TXG_MASK], dr); in dbuf_undirty()
2617 mutex_exit(&dn->dn_mtx); in dbuf_undirty()
2769 dnode_t *dn = DB_DNODE(db); in dmu_buf_untransform_direct() local
2778 err = dbuf_read_verify_dnode_crypt(db, dn, 0); in dmu_buf_untransform_direct()
3179 dnode_t *dn; in dbuf_destroy() local
3242 dn = DB_DNODE(db); in dbuf_destroy()
3243 dndb = dn->dn_dbuf; in dbuf_destroy()
3245 boolean_t needlock = !MUTEX_HELD(&dn->dn_dbufs_mtx); in dbuf_destroy()
3247 mutex_enter_nested(&dn->dn_dbufs_mtx, in dbuf_destroy()
3249 avl_remove(&dn->dn_dbufs, db); in dbuf_destroy()
3253 mutex_exit(&dn->dn_dbufs_mtx); in dbuf_destroy()
3262 mutex_enter(&dn->dn_mtx); in dbuf_destroy()
3263 dnode_rele_and_unlock(dn, db, B_TRUE); in dbuf_destroy()
3308 dbuf_findbp(dnode_t *dn, int level, uint64_t blkid, int fail_sparse, in dbuf_findbp() argument
3317 mutex_enter(&dn->dn_mtx); in dbuf_findbp()
3318 if (dn->dn_have_spill && in dbuf_findbp()
3319 (dn->dn_phys->dn_flags & DNODE_FLAG_SPILL_BLKPTR)) in dbuf_findbp()
3320 *bpp = DN_SPILL_BLKPTR(dn->dn_phys); in dbuf_findbp()
3323 dbuf_add_ref(dn->dn_dbuf, NULL); in dbuf_findbp()
3324 *parentp = dn->dn_dbuf; in dbuf_findbp()
3325 mutex_exit(&dn->dn_mtx); in dbuf_findbp()
3330 (dn->dn_phys->dn_nlevels == 0) ? 1 : dn->dn_phys->dn_nlevels; in dbuf_findbp()
3331 int epbs = dn->dn_indblkshift - SPA_BLKPTRSHIFT; in dbuf_findbp()
3334 ASSERT(RW_LOCK_HELD(&dn->dn_struct_rwlock)); in dbuf_findbp()
3352 highbit64(dn->dn_phys->dn_nblkptr) <= 64); in dbuf_findbp()
3354 blkid >= ((uint64_t)dn->dn_phys->dn_nblkptr << in dbuf_findbp()
3357 blkid > (dn->dn_phys->dn_maxblkid >> (level * epbs)))) { in dbuf_findbp()
3364 err = dbuf_hold_impl(dn, level + 1, in dbuf_findbp()
3379 if (blkid > (dn->dn_phys->dn_maxblkid >> (level * epbs))) in dbuf_findbp()
3386 ASSERT(dn->dn_phys->dn_nblkptr == 0 || in dbuf_findbp()
3387 blkid < dn->dn_phys->dn_nblkptr); in dbuf_findbp()
3388 if (dn->dn_dbuf) { in dbuf_findbp()
3389 dbuf_add_ref(dn->dn_dbuf, NULL); in dbuf_findbp()
3390 *parentp = dn->dn_dbuf; in dbuf_findbp()
3392 *bpp = &dn->dn_phys->dn_blkptr[blkid]; in dbuf_findbp()
3398 dbuf_create(dnode_t *dn, uint8_t level, uint64_t blkid, in dbuf_create() argument
3401 objset_t *os = dn->dn_objset; in dbuf_create()
3404 ASSERT(RW_LOCK_HELD(&dn->dn_struct_rwlock)); in dbuf_create()
3405 ASSERT(dn->dn_type != DMU_OT_NONE); in dbuf_create()
3413 db->db.db_object = dn->dn_object; in dbuf_create()
3418 db->db_dnode_handle = dn->dn_handle; in dbuf_create()
3420 db->db_dnode = dn; in dbuf_create()
3432 ASSERT3P(parent, ==, dn->dn_dbuf); in dbuf_create()
3433 db->db.db_size = DN_SLOTS_TO_BONUSLEN(dn->dn_num_slots) - in dbuf_create()
3434 (dn->dn_nblkptr-1) * sizeof (blkptr_t); in dbuf_create()
3435 ASSERT3U(db->db.db_size, >=, dn->dn_bonuslen); in dbuf_create()
3449 db->db_level ? 1 << dn->dn_indblkshift : dn->dn_datablksz; in dbuf_create()
3461 mutex_enter(&dn->dn_dbufs_mtx); in dbuf_create()
3465 mutex_exit(&dn->dn_dbufs_mtx); in dbuf_create()
3470 avl_add(&dn->dn_dbufs, db); in dbuf_create()
3475 mutex_exit(&dn->dn_dbufs_mtx); in dbuf_create()
3478 if (parent && parent != dn->dn_dbuf) in dbuf_create()
3481 ASSERT(dn->dn_object == DMU_META_DNODE_OBJECT || in dbuf_create()
3482 zfs_refcount_count(&dn->dn_holds) > 0); in dbuf_create()
3483 (void) zfs_refcount_add(&dn->dn_holds, db); in dbuf_create()
3498 dbuf_dnode_findbp(dnode_t *dn, uint64_t level, uint64_t blkid, in dbuf_dnode_findbp() argument
3504 ASSERT(RW_LOCK_HELD(&dn->dn_struct_rwlock)); in dbuf_dnode_findbp()
3506 err = dbuf_findbp(dn, level, blkid, B_FALSE, &dbp, &bp2); in dbuf_dnode_findbp()
3513 *datablkszsec = dn->dn_phys->dn_datablkszsec; in dbuf_dnode_findbp()
3515 *indblkshift = dn->dn_phys->dn_indblkshift; in dbuf_dnode_findbp()
3696 dbuf_prefetch_impl(dnode_t *dn, int64_t level, uint64_t blkid, in dbuf_prefetch_impl() argument
3705 ASSERT(RW_LOCK_HELD(&dn->dn_struct_rwlock)); in dbuf_prefetch_impl()
3707 if (blkid > dn->dn_maxblkid) in dbuf_prefetch_impl()
3710 if (level == 0 && dnode_block_freed(dn, blkid)) in dbuf_prefetch_impl()
3717 nlevels = dn->dn_phys->dn_nlevels; in dbuf_prefetch_impl()
3718 if (level >= nlevels || dn->dn_phys->dn_nblkptr == 0) in dbuf_prefetch_impl()
3721 epbs = dn->dn_phys->dn_indblkshift - SPA_BLKPTRSHIFT; in dbuf_prefetch_impl()
3722 if (dn->dn_phys->dn_maxblkid < blkid << (epbs * level)) in dbuf_prefetch_impl()
3725 dmu_buf_impl_t *db = dbuf_find(dn->dn_objset, dn->dn_object, in dbuf_prefetch_impl()
3748 if (dbuf_hold_impl(dn, parent_level, parent_blkid, in dbuf_prefetch_impl()
3762 ASSERT3U(curblkid, <, dn->dn_phys->dn_nblkptr); in dbuf_prefetch_impl()
3763 bp = dn->dn_phys->dn_blkptr[curblkid]; in dbuf_prefetch_impl()
3766 dsl_dataset_feature_is_active(dn->dn_objset->os_dsl_dataset, in dbuf_prefetch_impl()
3773 zio_t *pio = zio_root(dmu_objset_spa(dn->dn_objset), NULL, NULL, in dbuf_prefetch_impl()
3777 dsl_dataset_t *ds = dn->dn_objset->os_dsl_dataset; in dbuf_prefetch_impl()
3779 dn->dn_object, level, blkid); in dbuf_prefetch_impl()
3783 dpa->dpa_spa = dn->dn_objset->os_spa; in dbuf_prefetch_impl()
3784 dpa->dpa_dnode = dn; in dbuf_prefetch_impl()
3790 if (!DNODE_LEVEL_IS_CACHEABLE(dn, level)) in dbuf_prefetch_impl()
3792 else if (dnode_level_is_l2cacheable(&bp, dn, level)) in dbuf_prefetch_impl()
3810 if (dnode_level_is_l2cacheable(&bp, dn, level)) in dbuf_prefetch_impl()
3814 dn->dn_object, curlevel, curblkid); in dbuf_prefetch_impl()
3834 dbuf_prefetch(dnode_t *dn, int64_t level, uint64_t blkid, zio_priority_t prio, in dbuf_prefetch() argument
3838 return (dbuf_prefetch_impl(dn, level, blkid, prio, aflags, NULL, NULL)); in dbuf_prefetch()
3850 dbuf_hold_copy(dnode_t *dn, dmu_buf_impl_t *db) in dbuf_hold_copy() argument
3864 dbuf_set_data(db, arc_alloc_raw_buf(dn->dn_objset->os_spa, db, in dbuf_hold_copy()
3865 dmu_objset_id(dn->dn_objset), byteorder, salt, iv, mac, in dbuf_hold_copy()
3866 dn->dn_type, arc_buf_size(data), arc_buf_lsize(data), in dbuf_hold_copy()
3870 dn->dn_objset->os_spa, db, arc_buf_size(data), in dbuf_hold_copy()
3873 dbuf_set_data(db, arc_alloc_buf(dn->dn_objset->os_spa, db, in dbuf_hold_copy()
3887 dbuf_hold_impl(dnode_t *dn, uint8_t level, uint64_t blkid, in dbuf_hold_impl() argument
3895 spa_t *spa = dn->dn_objset->os_spa; in dbuf_hold_impl()
3902 ASSERT(RW_LOCK_HELD(&dn->dn_struct_rwlock)); in dbuf_hold_impl()
3903 ASSERT3U(dn->dn_nlevels, >, level); in dbuf_hold_impl()
3908 db = dbuf_find(dn->dn_objset, dn->dn_object, level, blkid, &hv); in dbuf_hold_impl()
3918 err = dbuf_findbp(dn, level, blkid, fail_sparse, &parent, &bp); in dbuf_hold_impl()
3930 db = dbuf_create(dn, level, blkid, parent, bp, hv); in dbuf_hold_impl()
3951 dn->dn_object != DMU_META_DNODE_OBJECT && in dbuf_hold_impl()
3956 dbuf_hold_copy(dn, db); in dbuf_hold_impl()
3993 ASSERT3P(DB_DNODE(db), ==, dn); in dbuf_hold_impl()
4002 dbuf_hold(dnode_t *dn, uint64_t blkid, const void *tag) in dbuf_hold() argument
4004 return (dbuf_hold_level(dn, 0, blkid, tag)); in dbuf_hold()
4008 dbuf_hold_level(dnode_t *dn, int level, uint64_t blkid, const void *tag) in dbuf_hold_level() argument
4011 int err = dbuf_hold_impl(dn, level, blkid, FALSE, FALSE, tag, &db); in dbuf_hold_level()
4016 dbuf_create_bonus(dnode_t *dn) in dbuf_create_bonus() argument
4018 ASSERT(RW_WRITE_HELD(&dn->dn_struct_rwlock)); in dbuf_create_bonus()
4020 ASSERT(dn->dn_bonus == NULL); in dbuf_create_bonus()
4021 dn->dn_bonus = dbuf_create(dn, 0, DMU_BONUS_BLKID, dn->dn_dbuf, NULL, in dbuf_create_bonus()
4022 dbuf_hash(dn->dn_objset, dn->dn_object, 0, DMU_BONUS_BLKID)); in dbuf_create_bonus()
4043 dbuf_rm_spill(dnode_t *dn, dmu_tx_t *tx) in dbuf_rm_spill() argument
4045 dbuf_free_range(dn, DMU_SPILL_BLKID, DMU_SPILL_BLKID, tx); in dbuf_rm_spill()
4145 dnode_t *dn; in dbuf_rele_and_unlock() local
4154 dn = DB_DNODE(db); in dbuf_rele_and_unlock()
4155 atomic_dec_32(&dn->dn_dbufs_count); in dbuf_rele_and_unlock()
4172 dnode_evict_bonus(dn); in dbuf_rele_and_unlock()
4174 dnode_rele(dn, db); in dbuf_rele_and_unlock()
4348 dbuf_check_blkptr(dnode_t *dn, dmu_buf_impl_t *db) in dbuf_check_blkptr() argument
4357 db->db_blkptr = DN_SPILL_BLKPTR(dn->dn_phys); in dbuf_check_blkptr()
4361 if (db->db_level == dn->dn_phys->dn_nlevels-1) { in dbuf_check_blkptr()
4367 ASSERT(db->db_blkid < dn->dn_phys->dn_nblkptr); in dbuf_check_blkptr()
4369 db->db_parent = dn->dn_dbuf; in dbuf_check_blkptr()
4370 db->db_blkptr = &dn->dn_phys->dn_blkptr[db->db_blkid]; in dbuf_check_blkptr()
4374 int epbs = dn->dn_phys->dn_indblkshift - SPA_BLKPTRSHIFT; in dbuf_check_blkptr()
4376 ASSERT(dn->dn_phys->dn_nlevels > 1); in dbuf_check_blkptr()
4379 rw_enter(&dn->dn_struct_rwlock, RW_READER); in dbuf_check_blkptr()
4380 parent = dbuf_hold_level(dn, db->db_level + 1, in dbuf_check_blkptr()
4382 rw_exit(&dn->dn_struct_rwlock); in dbuf_check_blkptr()
4403 dnode_t *dn = dr->dr_dnode; in dbuf_sync_bonus() local
4404 ASSERT3U(DN_MAX_BONUS_LEN(dn->dn_phys), <=, in dbuf_sync_bonus()
4405 DN_SLOTS_TO_BONUSLEN(dn->dn_phys->dn_extra_slots + 1)); in dbuf_sync_bonus()
4406 memcpy(DN_BONUS(dn->dn_phys), data, DN_MAX_BONUS_LEN(dn->dn_phys)); in dbuf_sync_bonus()
4465 dnode_t *dn = dr->dr_dnode; in dbuf_sync_indirect() local
4486 ASSERT3U(db->db.db_size, ==, 1<<dn->dn_phys->dn_indblkshift); in dbuf_sync_indirect()
4487 dbuf_check_blkptr(dn, db); in dbuf_sync_indirect()
4521 dnode_t *dn = dr->dr_dnode; in dbuf_sync_leaf_verify_bonus_dnode() local
4527 if (DMU_OT_IS_ENCRYPTED(dn->dn_bonustype)) in dbuf_sync_leaf_verify_bonus_dnode()
4530 uint16_t bonuslen = dn->dn_phys->dn_bonuslen; in dbuf_sync_leaf_verify_bonus_dnode()
4531 uint16_t maxbonuslen = DN_SLOTS_TO_BONUSLEN(dn->dn_num_slots); in dbuf_sync_leaf_verify_bonus_dnode()
4549 dnode_t *dn = dr->dr_dnode; in dbuf_lightweight_bp() local
4551 if (dn->dn_phys->dn_nlevels == 1) { in dbuf_lightweight_bp()
4552 VERIFY3U(dr->dt.dll.dr_blkid, <, dn->dn_phys->dn_nblkptr); in dbuf_lightweight_bp()
4553 return (&dn->dn_phys->dn_blkptr[dr->dt.dll.dr_blkid]); in dbuf_lightweight_bp()
4556 int epbs = dn->dn_indblkshift - SPA_BLKPTRSHIFT; in dbuf_lightweight_bp()
4558 VERIFY3P(DB_DNODE(parent_db), ==, dn); in dbuf_lightweight_bp()
4574 dnode_t *dn = dr->dr_dnode; in dbuf_lightweight_ready() local
4577 spa_t *spa = dmu_objset_spa(dn->dn_objset); in dbuf_lightweight_ready()
4580 dnode_diduse_space(dn, delta); in dbuf_lightweight_ready()
4583 mutex_enter(&dn->dn_mtx); in dbuf_lightweight_ready()
4584 if (blkid > dn->dn_phys->dn_maxblkid) { in dbuf_lightweight_ready()
4585 ASSERT0(dn->dn_objset->os_raw_receive); in dbuf_lightweight_ready()
4586 dn->dn_phys->dn_maxblkid = blkid; in dbuf_lightweight_ready()
4588 mutex_exit(&dn->dn_mtx); in dbuf_lightweight_ready()
4596 EQUIV(dr->dr_parent == NULL, dn->dn_phys->dn_nlevels == 1); in dbuf_lightweight_ready()
4598 parent_db = dn->dn_dbuf; in dbuf_lightweight_ready()
4635 dnode_t *dn = dr->dr_dnode; in dbuf_sync_lightweight() local
4637 if (dn->dn_phys->dn_nlevels == 1) { in dbuf_sync_lightweight()
4638 pio = dn->dn_zio; in dbuf_sync_lightweight()
4644 .zb_objset = dmu_objset_id(dn->dn_objset), in dbuf_sync_lightweight()
4645 .zb_object = dn->dn_object, in dbuf_sync_lightweight()
4656 dr->dr_zio = zio_write(pio, dmu_objset_spa(dn->dn_objset), in dbuf_sync_lightweight()
4658 dn->dn_datablksz, abd_get_size(dr->dt.dll.dr_abd), in dbuf_sync_lightweight()
4676 dnode_t *dn = dr->dr_dnode; in dbuf_sync_leaf() local
4718 mutex_enter(&dn->dn_mtx); in dbuf_sync_leaf()
4719 if (!(dn->dn_phys->dn_flags & DNODE_FLAG_SPILL_BLKPTR)) { in dbuf_sync_leaf()
4735 dn->dn_phys->dn_flags |= DNODE_FLAG_SPILL_BLKPTR; in dbuf_sync_leaf()
4736 mutex_exit(&dn->dn_mtx); in dbuf_sync_leaf()
4751 os = dn->dn_objset; in dbuf_sync_leaf()
4759 dbuf_check_blkptr(dn, db); in dbuf_sync_leaf()
4770 ASSERT(dn->dn_object != DMU_META_DNODE_OBJECT); in dbuf_sync_leaf()
4778 if (os->os_encrypted && dn->dn_object == DMU_META_DNODE_OBJECT) in dbuf_sync_leaf()
4782 dn->dn_object != DMU_META_DNODE_OBJECT && in dbuf_sync_leaf()
4810 dn->dn_type, psize, lsize, compress_type, in dbuf_sync_leaf()
4828 if (dn->dn_object == DMU_META_DNODE_OBJECT) { in dbuf_sync_leaf()
4829 list_insert_tail(&dn->dn_dirty_records[txg & TXG_MASK], dr); in dbuf_sync_leaf()
4878 dnode_t *dn; in dbuf_write_ready() local
4890 dn = DB_DNODE(db); in dbuf_write_ready()
4892 dnode_diduse_space(dn, delta - zio->io_prev_space_delta); in dbuf_write_ready()
4897 BP_GET_TYPE(bp) == dn->dn_type) || in dbuf_write_ready()
4899 BP_GET_TYPE(bp) == dn->dn_bonustype) || in dbuf_write_ready()
4908 ASSERT(dn->dn_phys->dn_flags & DNODE_FLAG_SPILL_BLKPTR); in dbuf_write_ready()
4910 db->db_blkptr == DN_SPILL_BLKPTR(dn->dn_phys)); in dbuf_write_ready()
4915 mutex_enter(&dn->dn_mtx); in dbuf_write_ready()
4916 if (db->db_blkid > dn->dn_phys->dn_maxblkid && in dbuf_write_ready()
4919 dn->dn_phys->dn_maxblkid = db->db_blkid; in dbuf_write_ready()
4921 mutex_exit(&dn->dn_mtx); in dbuf_write_ready()
4923 if (dn->dn_type == DMU_OT_DNODE) { in dbuf_write_ready()
4959 ASSERT3U(db->db.db_size, ==, 1<<dn->dn_phys->dn_indblkshift); in dbuf_write_ready()
5053 dnode_t *dn = dr->dr_dnode; in dbuf_write_done() local
5061 ASSERT(dn->dn_phys->dn_flags & DNODE_FLAG_SPILL_BLKPTR); in dbuf_write_done()
5063 db->db_blkptr == DN_SPILL_BLKPTR(dn->dn_phys)); in dbuf_write_done()
5080 ASSERT3U(db->db.db_size, ==, 1 << dn->dn_phys->dn_indblkshift); in dbuf_write_done()
5082 int epbs __maybe_unused = dn->dn_phys->dn_indblkshift - in dbuf_write_done()
5085 dn->dn_phys->dn_maxblkid >> (db->db_level * epbs)); in dbuf_write_done()
5173 dbuf_remap_impl(dnode_t *dn, blkptr_t *bp, krwlock_t *rw, dmu_tx_t *tx) in dbuf_remap_impl() argument
5176 spa_t *spa = dmu_objset_spa(dn->dn_objset); in dbuf_remap_impl()
5181 drica.drica_os = dn->dn_objset; in dbuf_remap_impl()
5194 if (dn->dn_objset != spa_meta_objset(spa)) { in dbuf_remap_impl()
5195 dsl_dataset_t *ds = dmu_objset_ds(dn->dn_objset); in dbuf_remap_impl()
5228 dbuf_remap(dnode_t *dn, dmu_buf_impl_t *db, dmu_tx_t *tx) in dbuf_remap() argument
5239 dbuf_remap_impl(dn, &bp[i], &db->db_rwlock, tx); in dbuf_remap()
5243 ASSERT3U(dn->dn_type, ==, DMU_OT_DNODE); in dbuf_remap()
5247 krwlock_t *lock = (dn->dn_dbuf == NULL ? NULL : in dbuf_remap()
5248 &dn->dn_dbuf->db_rwlock); in dbuf_remap()
5249 dbuf_remap_impl(dn, &dnp[i].dn_blkptr[j], lock, in dbuf_remap()
5265 dnode_t *dn = dr->dr_dnode; in dbuf_write() local
5276 os = dn->dn_objset; in dbuf_write()
5278 if (db->db_level > 0 || dn->dn_type == DMU_OT_DNODE) { in dbuf_write()
5289 dbuf_remap(dn, db, tx); in dbuf_write()
5292 if (parent != dn->dn_dbuf) { in dbuf_write()
5306 ASSERT((db->db_level == dn->dn_phys->dn_nlevels-1 && in dbuf_write()
5311 &dn->dn_phys->dn_blkptr[db->db_blkid]); in dbuf_write()
5312 pio = dn->dn_zio; in dbuf_write()
5327 dmu_write_policy(os, dn, db->db_level, wp_flag, &zp); in dbuf_write()