Lines Matching defs:dn

220 	dnode_t *dn;
223 if (dnode_hold(os, object, FTAG, &dn) == 0) {
224 rw_enter(&dn->dn_struct_rwlock, RW_READER);
225 if (dn->dn_bonus != NULL) {
226 db = dn->dn_bonus;
229 rw_exit(&dn->dn_struct_rwlock);
230 dnode_rele(dn, FTAG);
675 dnode_t *dn;
685 dn = DB_DNODE(db);
686 if (dn == NULL) {
690 ASSERT3U(db->db.db_object, ==, dn->dn_object);
691 ASSERT3P(db->db_objset, ==, dn->dn_objset);
692 ASSERT3U(db->db_level, <, dn->dn_nlevels);
695 !avl_is_empty(&dn->dn_dbufs));
698 ASSERT(dn != NULL);
699 ASSERT3U(db->db.db_size, >=, dn->dn_bonuslen);
702 ASSERT(dn != NULL);
703 ASSERT3U(db->db.db_size, >=, dn->dn_bonuslen);
731 if (db->db_parent == dn->dn_dbuf) {
733 /* ASSERT3U(db->db_blkid, <, dn->dn_nblkptr); */
740 &dn->dn_phys->dn_blkptr[db->db_blkid]);
752 if (RW_WRITE_HELD(&dn->dn_struct_rwlock)) {
762 db->db_state != DB_FILL && !dn->dn_free_txg) {
871 dbuf_whichblock(dnode_t *dn, int64_t level, uint64_t offset)
873 if (dn->dn_datablkshift != 0 && dn->dn_indblkshift != 0) {
893 return (offset >> (dn->dn_datablkshift + level *
894 (dn->dn_indblkshift - SPA_BLKPTRSHIFT)));
896 ASSERT3U(offset, <, dn->dn_datablksz);
938 dnode_t *dn;
943 dn = DB_DNODE(db);
946 ASSERT(RW_LOCK_HELD(&dn->dn_struct_rwlock));
952 int bonuslen = MIN(dn->dn_bonuslen, dn->dn_phys->dn_bonuslen);
960 bcopy(DN_BONUS(dn->dn_phys), db->db.db_data, bonuslen);
973 (db->db_level == 0 && (dnode_block_freed(dn, db->db_blkid) ||
990 1 << dn->dn_indblkshift);
993 dn->dn_datablksz :
1033 dnode_t *dn;
1045 dn = DB_DNODE(db);
1047 rw_enter(&dn->dn_struct_rwlock, RW_READER);
1050 (flags & DB_RF_NOPREFETCH) == 0 && dn != NULL &&
1057 dmu_zfetch(&dn->dn_zfetch, db->db_blkid, 1, B_TRUE);
1059 rw_exit(&dn->dn_struct_rwlock);
1062 spa_t *spa = dn->dn_objset->os_spa;
1071 dmu_zfetch(&dn->dn_zfetch, db->db_blkid, 1, B_TRUE);
1074 rw_exit(&dn->dn_struct_rwlock);
1090 dmu_zfetch(&dn->dn_zfetch, db->db_blkid, 1, B_TRUE);
1092 rw_exit(&dn->dn_struct_rwlock);
1235 dbuf_free_range(dnode_t *dn, uint64_t start_blkid, uint64_t end_blkid,
1243 if (end_blkid > dn->dn_maxblkid &&
1245 end_blkid = dn->dn_maxblkid;
1246 dprintf_dnode(dn, "start=%llu end=%llu\n", start_blkid, end_blkid);
1252 mutex_enter(&dn->dn_dbufs_mtx);
1253 db = avl_find(&dn->dn_dbufs, &db_search, &where);
1256 db = avl_nearest(&dn->dn_dbufs, where, AVL_AFTER);
1259 db_next = AVL_NEXT(&dn->dn_dbufs, db);
1304 db->db_blkid > dn->dn_maxblkid)
1305 dn->dn_maxblkid = db->db_blkid;
1327 mutex_exit(&dn->dn_dbufs_mtx);
1371 dnode_t *dn;
1376 dn = DB_DNODE(db);
1379 ASSERT(RW_WRITE_HELD(&dn->dn_struct_rwlock));
1394 buf = arc_alloc_buf(dn->dn_objset->os_spa, size, db, type);
1414 dnode_willuse_space(dn, size-osize, tx);
1460 dnode_t *dn;
1472 dn = DB_DNODE(db);
1479 if (dn->dn_objset->os_dsl_dataset != NULL) {
1480 rrw_enter(&dn->dn_objset->os_dsl_dataset->ds_bp_rwlock,
1484 BP_IS_HOLE(dn->dn_objset->os_rootbp) ||
1485 DMU_OBJECT_IS_SPECIAL(dn->dn_object) ||
1486 dn->dn_objset->os_dsl_dataset == NULL);
1487 if (dn->dn_objset->os_dsl_dataset != NULL)
1488 rrw_exit(&dn->dn_objset->os_dsl_dataset->ds_bp_rwlock, FTAG);
1495 ASSERT(dn->dn_object == DMU_META_DNODE_OBJECT ||
1496 dn->dn_dirtyctx == DN_UNDIRTIED || dn->dn_dirtyctx ==
1509 mutex_enter(&dn->dn_mtx);
1514 if (dn->dn_dirtyctx == DN_UNDIRTIED) {
1515 if (dn->dn_objset->os_dsl_dataset != NULL) {
1516 rrw_enter(&dn->dn_objset->os_dsl_dataset->ds_bp_rwlock,
1519 if (!BP_IS_HOLE(dn->dn_objset->os_rootbp)) {
1520 dn->dn_dirtyctx = (dmu_tx_is_syncing(tx) ?
1522 ASSERT(dn->dn_dirtyctx_firstset == NULL);
1523 dn->dn_dirtyctx_firstset = kmem_alloc(1, KM_SLEEP);
1525 if (dn->dn_objset->os_dsl_dataset != NULL) {
1526 rrw_exit(&dn->dn_objset->os_dsl_dataset->ds_bp_rwlock,
1530 mutex_exit(&dn->dn_mtx);
1533 dn->dn_have_spill = B_TRUE;
1554 ASSERT(dn->dn_object == 0 ||
1555 dn->dn_dirtyctx == DN_UNDIRTIED || dn->dn_dirtyctx ==
1558 ASSERT3U(dn->dn_nlevels, >, db->db_level);
1559 ASSERT((dn->dn_phys->dn_nlevels == 0 && db->db_level == 0) ||
1560 dn->dn_phys->dn_nlevels > db->db_level ||
1561 dn->dn_next_nlevels[txgoff] > db->db_level ||
1562 dn->dn_next_nlevels[(tx->tx_txg-1) & TXG_MASK] > db->db_level ||
1563 dn->dn_next_nlevels[(tx->tx_txg-2) & TXG_MASK] > db->db_level);
1572 os = dn->dn_objset;
1574 if (dn->dn_objset->os_dsl_dataset != NULL)
1576 ASSERT(!dmu_tx_is_syncing(tx) || DMU_OBJECT_IS_SPECIAL(dn->dn_object) ||
1578 if (dn->dn_objset->os_dsl_dataset != NULL)
1593 dnode_willuse_space(dn, db->db.db_size, tx);
1647 mutex_enter(&dn->dn_mtx);
1648 if (dn->dn_free_ranges[txgoff] != NULL) {
1649 range_tree_clear(dn->dn_free_ranges[txgoff],
1652 mutex_exit(&dn->dn_mtx);
1667 mutex_enter(&dn->dn_mtx);
1669 list_insert_tail(&dn->dn_dirty_records[txgoff], dr);
1670 mutex_exit(&dn->dn_mtx);
1671 dnode_setdirty(dn, tx);
1682 if (!RW_WRITE_HELD(&dn->dn_struct_rwlock)) {
1683 rw_enter(&dn->dn_struct_rwlock, RW_READER);
1700 dnode_willuse_space(dn, -willfree, tx);
1704 dnode_new_blkid(dn, db->db_blkid, tx, drop_struct_lock);
1705 ASSERT(dn->dn_maxblkid >= db->db_blkid);
1708 if (db->db_level+1 < dn->dn_nlevels) {
1713 if (db->db_parent == NULL || db->db_parent == dn->dn_dbuf) {
1714 int epbs = dn->dn_indblkshift - SPA_BLKPTRSHIFT;
1716 parent = dbuf_hold_level(dn, db->db_level+1,
1722 rw_exit(&dn->dn_struct_rwlock);
1734 dn->dn_object == DMU_META_DNODE_OBJECT) {
1744 ASSERT(db->db_level+1 == dn->dn_nlevels);
1745 ASSERT(db->db_blkid < dn->dn_nblkptr);
1746 ASSERT(db->db_parent == NULL || db->db_parent == dn->dn_dbuf);
1747 mutex_enter(&dn->dn_mtx);
1749 list_insert_tail(&dn->dn_dirty_records[txgoff], dr);
1750 mutex_exit(&dn->dn_mtx);
1752 rw_exit(&dn->dn_struct_rwlock);
1755 dnode_setdirty(dn, tx);
1767 dnode_t *dn;
1798 dn = DB_DNODE(db);
1804 dsl_pool_undirty_space(dmu_objset_pool(dn->dn_objset),
1820 db->db_level + 1 == dn->dn_nlevels) {
1821 ASSERT(db->db_blkptr == NULL || db->db_parent == dn->dn_dbuf);
1822 mutex_enter(&dn->dn_mtx);
1823 list_remove(&dn->dn_dirty_records[txg & TXG_MASK], dr);
1824 mutex_exit(&dn->dn_mtx);
2044 dnode_t *dn;
2085 dn = DB_DNODE(db);
2086 dndb = dn->dn_dbuf;
2088 boolean_t needlock = !MUTEX_HELD(&dn->dn_dbufs_mtx);
2090 mutex_enter(&dn->dn_dbufs_mtx);
2091 avl_remove(&dn->dn_dbufs, db);
2092 atomic_dec_32(&dn->dn_dbufs_count);
2096 mutex_exit(&dn->dn_dbufs_mtx);
2105 dnode_rele(dn, db);
2142 dbuf_findbp(dnode_t *dn, int level, uint64_t blkid, int fail_sparse,
2153 mutex_enter(&dn->dn_mtx);
2154 if (dn->dn_have_spill &&
2155 (dn->dn_phys->dn_flags & DNODE_FLAG_SPILL_BLKPTR))
2156 *bpp = &dn->dn_phys->dn_spill;
2159 dbuf_add_ref(dn->dn_dbuf, NULL);
2160 *parentp = dn->dn_dbuf;
2161 mutex_exit(&dn->dn_mtx);
2165 if (dn->dn_phys->dn_nlevels == 0)
2168 nlevels = dn->dn_phys->dn_nlevels;
2170 epbs = dn->dn_indblkshift - SPA_BLKPTRSHIFT;
2173 ASSERT(RW_LOCK_HELD(&dn->dn_struct_rwlock));
2175 (blkid > (dn->dn_phys->dn_maxblkid >> (level * epbs)))) {
2180 int err = dbuf_hold_impl(dn, level+1,
2197 ASSERT(dn->dn_phys->dn_nblkptr == 0 ||
2198 blkid < dn->dn_phys->dn_nblkptr);
2199 if (dn->dn_dbuf) {
2200 dbuf_add_ref(dn->dn_dbuf, NULL);
2201 *parentp = dn->dn_dbuf;
2203 *bpp = &dn->dn_phys->dn_blkptr[blkid];
2209 dbuf_create(dnode_t *dn, uint8_t level, uint64_t blkid,
2212 objset_t *os = dn->dn_objset;
2215 ASSERT(RW_LOCK_HELD(&dn->dn_struct_rwlock));
2216 ASSERT(dn->dn_type != DMU_OT_NONE);
2221 db->db.db_object = dn->dn_object;
2226 db->db_dnode_handle = dn->dn_handle;
2236 ASSERT3P(parent, ==, dn->dn_dbuf);
2238 (dn->dn_nblkptr-1) * sizeof (blkptr_t);
2239 ASSERT3U(db->db.db_size, >=, dn->dn_bonuslen);
2251 db->db_level ? 1 << dn->dn_indblkshift : dn->dn_datablksz;
2263 mutex_enter(&dn->dn_dbufs_mtx);
2268 mutex_exit(&dn->dn_dbufs_mtx);
2271 avl_add(&dn->dn_dbufs, db);
2274 mutex_exit(&dn->dn_dbufs_mtx);
2277 if (parent && parent != dn->dn_dbuf)
2280 ASSERT(dn->dn_object == DMU_META_DNODE_OBJECT ||
2281 refcount_count(&dn->dn_holds) > 0);
2282 (void) refcount_add(&dn->dn_holds, db);
2283 atomic_inc_32(&dn->dn_dbufs_count);
2403 dbuf_prefetch(dnode_t *dn, int64_t level, uint64_t blkid, zio_priority_t prio,
2411 ASSERT(RW_LOCK_HELD(&dn->dn_struct_rwlock));
2413 if (blkid > dn->dn_maxblkid)
2416 if (dnode_block_freed(dn, blkid))
2423 nlevels = dn->dn_phys->dn_nlevels;
2424 if (level >= nlevels || dn->dn_phys->dn_nblkptr == 0)
2427 epbs = dn->dn_phys->dn_indblkshift - SPA_BLKPTRSHIFT;
2428 if (dn->dn_phys->dn_maxblkid < blkid << (epbs * level))
2431 dmu_buf_impl_t *db = dbuf_find(dn->dn_objset, dn->dn_object,
2454 if (dbuf_hold_impl(dn, parent_level, parent_blkid,
2468 ASSERT3U(curblkid, <, dn->dn_phys->dn_nblkptr);
2469 bp = dn->dn_phys->dn_blkptr[curblkid];
2476 zio_t *pio = zio_root(dmu_objset_spa(dn->dn_objset), NULL, NULL,
2480 dsl_dataset_t *ds = dn->dn_objset->os_dsl_dataset;
2482 dn->dn_object, level, blkid);
2486 dpa->dpa_spa = dn->dn_objset->os_spa;
2487 dpa->dpa_dnode = dn;
2507 dn->dn_object, curlevel, curblkid);
2525 dbuf_hold_impl(dnode_t *dn, uint8_t level, uint64_t blkid,
2532 ASSERT(RW_LOCK_HELD(&dn->dn_struct_rwlock));
2533 ASSERT3U(dn->dn_nlevels, >, level);
2538 db = dbuf_find(dn->dn_objset, dn->dn_object, level, blkid);
2548 err = dbuf_findbp(dn, level, blkid, fail_sparse, &parent, &bp);
2560 db = dbuf_create(dn, level, blkid, parent, bp);
2579 dn->dn_object != DMU_META_DNODE_OBJECT &&
2587 arc_alloc_buf(dn->dn_objset->os_spa,
2608 ASSERT3P(DB_DNODE(db), ==, dn);
2617 dbuf_hold(dnode_t *dn, uint64_t blkid, void *tag)
2619 return (dbuf_hold_level(dn, 0, blkid, tag));
2623 dbuf_hold_level(dnode_t *dn, int level, uint64_t blkid, void *tag)
2626 int err = dbuf_hold_impl(dn, level, blkid, FALSE, FALSE, tag, &db);
2631 dbuf_create_bonus(dnode_t *dn)
2633 ASSERT(RW_WRITE_HELD(&dn->dn_struct_rwlock));
2635 ASSERT(dn->dn_bonus == NULL);
2636 dn->dn_bonus = dbuf_create(dn, 0, DMU_BONUS_BLKID, dn->dn_dbuf, NULL);
2643 dnode_t *dn;
2653 dn = DB_DNODE(db);
2654 rw_enter(&dn->dn_struct_rwlock, RW_WRITER);
2656 rw_exit(&dn->dn_struct_rwlock);
2663 dbuf_rm_spill(dnode_t *dn, dmu_tx_t *tx)
2665 dbuf_free_range(dn, DMU_SPILL_BLKID, DMU_SPILL_BLKID, tx);
2755 dnode_t *dn;
2764 dn = DB_DNODE(db);
2765 atomic_dec_32(&dn->dn_dbufs_count);
2782 dnode_evict_bonus(dn);
2784 dnode_rele(dn, db);
2936 dbuf_check_blkptr(dnode_t *dn, dmu_buf_impl_t *db)
2945 db->db_blkptr = &dn->dn_phys->dn_spill;
2949 if (db->db_level == dn->dn_phys->dn_nlevels-1) {
2955 ASSERT(db->db_blkid < dn->dn_phys->dn_nblkptr);
2957 db->db_parent = dn->dn_dbuf;
2958 db->db_blkptr = &dn->dn_phys->dn_blkptr[db->db_blkid];
2962 int epbs = dn->dn_phys->dn_indblkshift - SPA_BLKPTRSHIFT;
2964 ASSERT(dn->dn_phys->dn_nlevels > 1);
2967 rw_enter(&dn->dn_struct_rwlock, RW_READER);
2968 parent = dbuf_hold_level(dn, db->db_level + 1,
2970 rw_exit(&dn->dn_struct_rwlock);
2984 dnode_t *dn;
3006 dn = DB_DNODE(db);
3008 ASSERT3U(db->db.db_size, ==, 1<<dn->dn_phys->dn_indblkshift);
3009 dbuf_check_blkptr(dn, db);
3031 dnode_t *dn;
3056 dn = DB_DNODE(db);
3059 mutex_enter(&dn->dn_mtx);
3060 dn->dn_phys->dn_flags |= DNODE_FLAG_SPILL_BLKPTR;
3061 mutex_exit(&dn->dn_mtx);
3075 ASSERT3U(dn->dn_phys->dn_bonuslen, <=, DN_MAX_BONUSLEN);
3076 bcopy(*datap, DN_BONUS(dn->dn_phys), dn->dn_phys->dn_bonuslen);
3101 os = dn->dn_objset;
3109 dbuf_check_blkptr(dn, db);
3116 ASSERT(dn->dn_object != DMU_META_DNODE_OBJECT);
3122 dn->dn_object != DMU_META_DNODE_OBJECT &&
3149 if (dn->dn_object == DMU_META_DNODE_OBJECT) {
3150 list_insert_tail(&dn->dn_dirty_records[txg&TXG_MASK], dr);
3200 dnode_t *dn;
3212 dn = DB_DNODE(db);
3214 dnode_diduse_space(dn, delta - zio->io_prev_space_delta);
3219 BP_GET_TYPE(bp) == dn->dn_type) ||
3221 BP_GET_TYPE(bp) == dn->dn_bonustype) ||
3230 ASSERT(dn->dn_phys->dn_flags & DNODE_FLAG_SPILL_BLKPTR);
3232 db->db_blkptr == &dn->dn_phys->dn_spill);
3237 mutex_enter(&dn->dn_mtx);
3238 if (db->db_blkid > dn->dn_phys->dn_maxblkid &&
3240 dn->dn_phys->dn_maxblkid = db->db_blkid;
3241 mutex_exit(&dn->dn_mtx);
3243 if (dn->dn_type == DMU_OT_DNODE) {
3259 ASSERT3U(db->db.db_size, ==, 1<<dn->dn_phys->dn_indblkshift);
3273 rw_enter(&dn->dn_struct_rwlock, RW_WRITER);
3275 rw_exit(&dn->dn_struct_rwlock);
3290 dnode_t *dn;
3297 dn = DB_DNODE(db);
3298 epbs = dn->dn_phys->dn_indblkshift - SPA_BLKPTRSHIFT;
3389 dnode_t *dn;
3392 dn = DB_DNODE(db);
3393 ASSERT(dn->dn_phys->dn_flags & DNODE_FLAG_SPILL_BLKPTR);
3395 db->db_blkptr == &dn->dn_phys->dn_spill);
3408 dnode_t *dn;
3411 dn = DB_DNODE(db);
3413 ASSERT3U(db->db.db_size, ==, 1 << dn->dn_phys->dn_indblkshift);
3416 dn->dn_phys->dn_indblkshift - SPA_BLKPTRSHIFT;
3418 dn->dn_phys->dn_maxblkid >> (db->db_level * epbs));
3479 dnode_t *dn;
3491 dn = DB_DNODE(db);
3492 os = dn->dn_objset;
3495 if (db->db_level > 0 || dn->dn_type == DMU_OT_DNODE) {
3510 if (parent != dn->dn_dbuf) {
3524 ASSERT((db->db_level == dn->dn_phys->dn_nlevels-1 &&
3529 &dn->dn_phys->dn_blkptr[db->db_blkid]);
3530 zio = dn->dn_zio;
3545 dmu_write_policy(os, dn, db->db_level, wp_flag, &zp);