Lines Matching defs:dn

156 	dnode_t *dn;
159 if (dnode_hold(os, object, FTAG, &dn) == 0) {
160 rw_enter(&dn->dn_struct_rwlock, RW_READER);
161 if (dn->dn_bonus != NULL) {
162 db = dn->dn_bonus;
165 rw_exit(&dn->dn_struct_rwlock);
166 dnode_rele(dn, FTAG);
412 dnode_t *dn;
422 dn = DB_DNODE(db);
423 if (dn == NULL) {
427 ASSERT3U(db->db.db_object, ==, dn->dn_object);
428 ASSERT3P(db->db_objset, ==, dn->dn_objset);
429 ASSERT3U(db->db_level, <, dn->dn_nlevels);
432 !avl_is_empty(&dn->dn_dbufs));
435 ASSERT(dn != NULL);
436 ASSERT3U(db->db.db_size, >=, dn->dn_bonuslen);
439 ASSERT(dn != NULL);
440 ASSERT3U(db->db.db_size, >=, dn->dn_bonuslen);
468 if (db->db_parent == dn->dn_dbuf) {
470 /* ASSERT3U(db->db_blkid, <, dn->dn_nblkptr); */
477 &dn->dn_phys->dn_blkptr[db->db_blkid]);
489 if (RW_WRITE_HELD(&dn->dn_struct_rwlock)) {
499 db->db_state != DB_FILL && !dn->dn_free_txg) {
572 dbuf_whichblock(dnode_t *dn, int64_t level, uint64_t offset)
574 if (dn->dn_datablkshift != 0 && dn->dn_indblkshift != 0) {
594 return (offset >> (dn->dn_datablkshift + level *
595 (dn->dn_indblkshift - SPA_BLKPTRSHIFT)));
597 ASSERT3U(offset, <, dn->dn_datablksz);
639 dnode_t *dn;
644 dn = DB_DNODE(db);
647 ASSERT(RW_LOCK_HELD(&dn->dn_struct_rwlock));
653 int bonuslen = MIN(dn->dn_bonuslen, dn->dn_phys->dn_bonuslen);
661 bcopy(DN_BONUS(dn->dn_phys), db->db.db_data, bonuslen);
674 (db->db_level == 0 && (dnode_block_freed(dn, db->db_blkid) ||
715 dnode_t *dn;
727 dn = DB_DNODE(db);
729 rw_enter(&dn->dn_struct_rwlock, RW_READER);
732 (flags & DB_RF_NOPREFETCH) == 0 && dn != NULL &&
739 dmu_zfetch(&dn->dn_zfetch, db->db_blkid, 1);
741 rw_exit(&dn->dn_struct_rwlock);
744 spa_t *spa = dn->dn_objset->os_spa;
753 dmu_zfetch(&dn->dn_zfetch, db->db_blkid, 1);
756 rw_exit(&dn->dn_struct_rwlock);
772 dmu_zfetch(&dn->dn_zfetch, db->db_blkid, 1);
774 rw_exit(&dn->dn_struct_rwlock);
919 dbuf_free_range(dnode_t *dn, uint64_t start_blkid, uint64_t end_blkid,
927 if (end_blkid > dn->dn_maxblkid && (end_blkid != DMU_SPILL_BLKID))
928 end_blkid = dn->dn_maxblkid;
929 dprintf_dnode(dn, "start=%llu end=%llu\n", start_blkid, end_blkid);
935 mutex_enter(&dn->dn_dbufs_mtx);
936 if (start_blkid >= dn->dn_unlisted_l0_blkid) {
939 db = avl_find(&dn->dn_dbufs, &db_search, &where);
941 db = avl_nearest(&dn->dn_dbufs, where, AVL_AFTER);
944 mutex_exit(&dn->dn_dbufs_mtx);
946 } else if (dmu_objset_is_receiving(dn->dn_objset)) {
957 db = avl_find(&dn->dn_dbufs, &db_search, &where);
959 db = avl_nearest(&dn->dn_dbufs, where, AVL_AFTER);
962 db_next = AVL_NEXT(&dn->dn_dbufs, db);
1007 db->db_blkid > dn->dn_maxblkid)
1008 dn->dn_maxblkid = db->db_blkid;
1030 mutex_exit(&dn->dn_dbufs_mtx);
1074 dnode_t *dn;
1079 dn = DB_DNODE(db);
1082 ASSERT(RW_WRITE_HELD(&dn->dn_struct_rwlock));
1097 buf = arc_buf_alloc(dn->dn_objset->os_spa, size, db, type);
1117 dnode_willuse_space(dn, size-osize, tx);
1163 dnode_t *dn;
1175 dn = DB_DNODE(db);
1182 BP_IS_HOLE(dn->dn_objset->os_rootbp) ||
1183 DMU_OBJECT_IS_SPECIAL(dn->dn_object) ||
1184 dn->dn_objset->os_dsl_dataset == NULL);
1190 ASSERT(dn->dn_object == DMU_META_DNODE_OBJECT ||
1191 dn->dn_dirtyctx == DN_UNDIRTIED || dn->dn_dirtyctx ==
1204 mutex_enter(&dn->dn_mtx);
1209 if (dn->dn_dirtyctx == DN_UNDIRTIED &&
1210 !BP_IS_HOLE(dn->dn_objset->os_rootbp)) {
1211 dn->dn_dirtyctx =
1213 ASSERT(dn->dn_dirtyctx_firstset == NULL);
1214 dn->dn_dirtyctx_firstset = kmem_alloc(1, KM_SLEEP);
1216 mutex_exit(&dn->dn_mtx);
1219 dn->dn_have_spill = B_TRUE;
1240 ASSERT(dn->dn_object == 0 ||
1241 dn->dn_dirtyctx == DN_UNDIRTIED || dn->dn_dirtyctx ==
1244 ASSERT3U(dn->dn_nlevels, >, db->db_level);
1245 ASSERT((dn->dn_phys->dn_nlevels == 0 && db->db_level == 0) ||
1246 dn->dn_phys->dn_nlevels > db->db_level ||
1247 dn->dn_next_nlevels[txgoff] > db->db_level ||
1248 dn->dn_next_nlevels[(tx->tx_txg-1) & TXG_MASK] > db->db_level ||
1249 dn->dn_next_nlevels[(tx->tx_txg-2) & TXG_MASK] > db->db_level);
1258 os = dn->dn_objset;
1259 ASSERT(!dmu_tx_is_syncing(tx) || DMU_OBJECT_IS_SPECIAL(dn->dn_object) ||
1273 dnode_willuse_space(dn, db->db.db_size, tx);
1327 mutex_enter(&dn->dn_mtx);
1328 if (dn->dn_free_ranges[txgoff] != NULL) {
1329 range_tree_clear(dn->dn_free_ranges[txgoff],
1332 mutex_exit(&dn->dn_mtx);
1347 mutex_enter(&dn->dn_mtx);
1349 list_insert_tail(&dn->dn_dirty_records[txgoff], dr);
1350 mutex_exit(&dn->dn_mtx);
1351 dnode_setdirty(dn, tx);
1367 dnode_willuse_space(dn, -willfree, tx);
1370 if (!RW_WRITE_HELD(&dn->dn_struct_rwlock)) {
1371 rw_enter(&dn->dn_struct_rwlock, RW_READER);
1376 dnode_new_blkid(dn, db->db_blkid, tx, drop_struct_lock);
1377 ASSERT(dn->dn_maxblkid >= db->db_blkid);
1380 if (db->db_level+1 < dn->dn_nlevels) {
1385 if (db->db_parent == NULL || db->db_parent == dn->dn_dbuf) {
1386 int epbs = dn->dn_indblkshift - SPA_BLKPTRSHIFT;
1388 parent = dbuf_hold_level(dn, db->db_level+1,
1394 rw_exit(&dn->dn_struct_rwlock);
1406 dn->dn_object == DMU_META_DNODE_OBJECT) {
1416 ASSERT(db->db_level+1 == dn->dn_nlevels);
1417 ASSERT(db->db_blkid < dn->dn_nblkptr);
1418 ASSERT(db->db_parent == NULL || db->db_parent == dn->dn_dbuf);
1419 mutex_enter(&dn->dn_mtx);
1421 list_insert_tail(&dn->dn_dirty_records[txgoff], dr);
1422 mutex_exit(&dn->dn_mtx);
1424 rw_exit(&dn->dn_struct_rwlock);
1427 dnode_setdirty(dn, tx);
1439 dnode_t *dn;
1470 dn = DB_DNODE(db);
1476 dsl_pool_undirty_space(dmu_objset_pool(dn->dn_objset),
1492 db->db_level + 1 == dn->dn_nlevels) {
1493 ASSERT(db->db_blkptr == NULL || db->db_parent == dn->dn_dbuf);
1494 mutex_enter(&dn->dn_mtx);
1495 list_remove(&dn->dn_dirty_records[txg & TXG_MASK], dr);
1496 mutex_exit(&dn->dn_mtx);
1736 dnode_t *dn;
1763 dn = DB_DNODE(db);
1764 dndb = dn->dn_dbuf;
1765 if (db->db_blkid != DMU_BONUS_BLKID && MUTEX_HELD(&dn->dn_dbufs_mtx)) {
1766 avl_remove(&dn->dn_dbufs, db);
1767 atomic_dec_32(&dn->dn_dbufs_count);
1778 dnode_rele(dn, db);
1805 dbuf_findbp(dnode_t *dn, int level, uint64_t blkid, int fail_sparse,
1816 mutex_enter(&dn->dn_mtx);
1817 if (dn->dn_have_spill &&
1818 (dn->dn_phys->dn_flags & DNODE_FLAG_SPILL_BLKPTR))
1819 *bpp = &dn->dn_phys->dn_spill;
1822 dbuf_add_ref(dn->dn_dbuf, NULL);
1823 *parentp = dn->dn_dbuf;
1824 mutex_exit(&dn->dn_mtx);
1828 if (dn->dn_phys->dn_nlevels == 0)
1831 nlevels = dn->dn_phys->dn_nlevels;
1833 epbs = dn->dn_indblkshift - SPA_BLKPTRSHIFT;
1836 ASSERT(RW_LOCK_HELD(&dn->dn_struct_rwlock));
1838 (blkid > (dn->dn_phys->dn_maxblkid >> (level * epbs)))) {
1843 int err = dbuf_hold_impl(dn, level+1,
1860 ASSERT(dn->dn_phys->dn_nblkptr == 0 ||
1861 blkid < dn->dn_phys->dn_nblkptr);
1862 if (dn->dn_dbuf) {
1863 dbuf_add_ref(dn->dn_dbuf, NULL);
1864 *parentp = dn->dn_dbuf;
1866 *bpp = &dn->dn_phys->dn_blkptr[blkid];
1872 dbuf_create(dnode_t *dn, uint8_t level, uint64_t blkid,
1875 objset_t *os = dn->dn_objset;
1878 ASSERT(RW_LOCK_HELD(&dn->dn_struct_rwlock));
1879 ASSERT(dn->dn_type != DMU_OT_NONE);
1884 db->db.db_object = dn->dn_object;
1889 db->db_dnode_handle = dn->dn_handle;
1899 ASSERT3P(parent, ==, dn->dn_dbuf);
1901 (dn->dn_nblkptr-1) * sizeof (blkptr_t);
1902 ASSERT3U(db->db.db_size, >=, dn->dn_bonuslen);
1914 db->db_level ? 1 << dn->dn_indblkshift : dn->dn_datablksz;
1926 mutex_enter(&dn->dn_dbufs_mtx);
1931 mutex_exit(&dn->dn_dbufs_mtx);
1934 avl_add(&dn->dn_dbufs, db);
1936 dn->dn_unlisted_l0_blkid)
1937 dn->dn_unlisted_l0_blkid = db->db_blkid + 1;
1939 mutex_exit(&dn->dn_dbufs_mtx);
1942 if (parent && parent != dn->dn_dbuf)
1945 ASSERT(dn->dn_object == DMU_META_DNODE_OBJECT ||
1946 refcount_count(&dn->dn_holds) > 0);
1947 (void) refcount_add(&dn->dn_holds, db);
1948 atomic_inc_32(&dn->dn_dbufs_count);
1988 dnode_t *dn;
1991 dn = DB_DNODE(db);
1992 mutex_enter(&dn->dn_dbufs_mtx);
1993 avl_remove(&dn->dn_dbufs, db);
1994 atomic_dec_32(&dn->dn_dbufs_count);
1995 mutex_exit(&dn->dn_dbufs_mtx);
2003 dnode_rele(dn, db);
2104 dbuf_prefetch(dnode_t *dn, int64_t level, uint64_t blkid, zio_priority_t prio,
2112 ASSERT(RW_LOCK_HELD(&dn->dn_struct_rwlock));
2114 if (blkid > dn->dn_maxblkid)
2117 if (dnode_block_freed(dn, blkid))
2124 nlevels = dn->dn_phys->dn_nlevels;
2125 if (level >= nlevels || dn->dn_phys->dn_nblkptr == 0)
2128 epbs = dn->dn_phys->dn_indblkshift - SPA_BLKPTRSHIFT;
2129 if (dn->dn_phys->dn_maxblkid < blkid << (epbs * level))
2132 dmu_buf_impl_t *db = dbuf_find(dn->dn_objset, dn->dn_object,
2155 if (dbuf_hold_impl(dn, parent_level, parent_blkid,
2169 ASSERT3U(curblkid, <, dn->dn_phys->dn_nblkptr);
2170 bp = dn->dn_phys->dn_blkptr[curblkid];
2177 zio_t *pio = zio_root(dmu_objset_spa(dn->dn_objset), NULL, NULL,
2181 dsl_dataset_t *ds = dn->dn_objset->os_dsl_dataset;
2183 dn->dn_object, level, blkid);
2187 dpa->dpa_spa = dn->dn_objset->os_spa;
2207 dn->dn_object, curlevel, curblkid);
2225 dbuf_hold_impl(dnode_t *dn, uint8_t level, uint64_t blkid,
2232 ASSERT(RW_LOCK_HELD(&dn->dn_struct_rwlock));
2233 ASSERT3U(dn->dn_nlevels, >, level);
2238 db = dbuf_find(dn->dn_objset, dn->dn_object, level, blkid);
2248 err = dbuf_findbp(dn, level, blkid, fail_sparse, &parent, &bp);
2260 db = dbuf_create(dn, level, blkid, parent, bp);
2289 dn->dn_object != DMU_META_DNODE_OBJECT &&
2297 arc_buf_alloc(dn->dn_objset->os_spa,
2312 ASSERT3P(DB_DNODE(db), ==, dn);
2321 dbuf_hold(dnode_t *dn, uint64_t blkid, void *tag)
2323 return (dbuf_hold_level(dn, 0, blkid, tag));
2327 dbuf_hold_level(dnode_t *dn, int level, uint64_t blkid, void *tag)
2330 int err = dbuf_hold_impl(dn, level, blkid, FALSE, FALSE, tag, &db);
2335 dbuf_create_bonus(dnode_t *dn)
2337 ASSERT(RW_WRITE_HELD(&dn->dn_struct_rwlock));
2339 ASSERT(dn->dn_bonus == NULL);
2340 dn->dn_bonus = dbuf_create(dn, 0, DMU_BONUS_BLKID, dn->dn_dbuf, NULL);
2347 dnode_t *dn;
2357 dn = DB_DNODE(db);
2358 rw_enter(&dn->dn_struct_rwlock, RW_WRITER);
2360 rw_exit(&dn->dn_struct_rwlock);
2367 dbuf_rm_spill(dnode_t *dn, dmu_tx_t *tx)
2369 dbuf_free_range(dn, DMU_SPILL_BLKID, DMU_SPILL_BLKID, tx);
2457 dnode_t *dn;
2466 dn = DB_DNODE(db);
2467 atomic_dec_32(&dn->dn_dbufs_count);
2484 dnode_evict_bonus(dn);
2486 dnode_rele(dn, db);
2627 dbuf_check_blkptr(dnode_t *dn, dmu_buf_impl_t *db)
2636 db->db_blkptr = &dn->dn_phys->dn_spill;
2640 if (db->db_level == dn->dn_phys->dn_nlevels-1) {
2646 ASSERT(db->db_blkid < dn->dn_phys->dn_nblkptr);
2648 db->db_parent = dn->dn_dbuf;
2649 db->db_blkptr = &dn->dn_phys->dn_blkptr[db->db_blkid];
2653 int epbs = dn->dn_phys->dn_indblkshift - SPA_BLKPTRSHIFT;
2655 ASSERT(dn->dn_phys->dn_nlevels > 1);
2658 rw_enter(&dn->dn_struct_rwlock, RW_READER);
2659 parent = dbuf_hold_level(dn, db->db_level + 1,
2661 rw_exit(&dn->dn_struct_rwlock);
2675 dnode_t *dn;
2697 dn = DB_DNODE(db);
2699 ASSERT3U(db->db.db_size, ==, 1<<dn->dn_phys->dn_indblkshift);
2700 dbuf_check_blkptr(dn, db);
2722 dnode_t *dn;
2747 dn = DB_DNODE(db);
2750 mutex_enter(&dn->dn_mtx);
2751 dn->dn_phys->dn_flags |= DNODE_FLAG_SPILL_BLKPTR;
2752 mutex_exit(&dn->dn_mtx);
2766 ASSERT3U(dn->dn_phys->dn_bonuslen, <=, DN_MAX_BONUSLEN);
2767 bcopy(*datap, DN_BONUS(dn->dn_phys), dn->dn_phys->dn_bonuslen);
2788 os = dn->dn_objset;
2796 dbuf_check_blkptr(dn, db);
2803 ASSERT(dn->dn_object != DMU_META_DNODE_OBJECT);
2809 dn->dn_object != DMU_META_DNODE_OBJECT &&
2836 if (dn->dn_object == DMU_META_DNODE_OBJECT) {
2837 list_insert_tail(&dn->dn_dirty_records[txg&TXG_MASK], dr);
2887 dnode_t *dn;
2898 dn = DB_DNODE(db);
2900 dnode_diduse_space(dn, delta - zio->io_prev_space_delta);
2905 BP_GET_TYPE(bp) == dn->dn_type) ||
2907 BP_GET_TYPE(bp) == dn->dn_bonustype) ||
2916 ASSERT(dn->dn_phys->dn_flags & DNODE_FLAG_SPILL_BLKPTR);
2918 db->db_blkptr == &dn->dn_phys->dn_spill);
2923 mutex_enter(&dn->dn_mtx);
2924 if (db->db_blkid > dn->dn_phys->dn_maxblkid &&
2926 dn->dn_phys->dn_maxblkid = db->db_blkid;
2927 mutex_exit(&dn->dn_mtx);
2929 if (dn->dn_type == DMU_OT_DNODE) {
2945 ASSERT3U(db->db.db_size, ==, 1<<dn->dn_phys->dn_indblkshift);
3032 dnode_t *dn;
3035 dn = DB_DNODE(db);
3036 ASSERT(dn->dn_phys->dn_flags & DNODE_FLAG_SPILL_BLKPTR);
3038 db->db_blkptr == &dn->dn_phys->dn_spill);
3054 dnode_t *dn;
3057 dn = DB_DNODE(db);
3059 ASSERT3U(db->db.db_size, ==, 1 << dn->dn_phys->dn_indblkshift);
3062 dn->dn_phys->dn_indblkshift - SPA_BLKPTRSHIFT;
3064 dn->dn_phys->dn_maxblkid >> (db->db_level * epbs));
3127 dnode_t *dn;
3137 dn = DB_DNODE(db);
3138 os = dn->dn_objset;
3141 if (db->db_level > 0 || dn->dn_type == DMU_OT_DNODE) {
3156 if (parent != dn->dn_dbuf) {
3170 ASSERT((db->db_level == dn->dn_phys->dn_nlevels-1 &&
3175 &dn->dn_phys->dn_blkptr[db->db_blkid]);
3176 zio = dn->dn_zio;
3191 dmu_write_policy(os, dn, db->db_level, wp_flag, &zp);