Lines Matching refs:dn

117 	dnode_t *dn = arg;  in dnode_cons()  local
120 rw_init(&dn->dn_struct_rwlock, NULL, RW_DEFAULT, NULL); in dnode_cons()
121 mutex_init(&dn->dn_mtx, NULL, MUTEX_DEFAULT, NULL); in dnode_cons()
122 mutex_init(&dn->dn_dbufs_mtx, NULL, MUTEX_DEFAULT, NULL); in dnode_cons()
123 cv_init(&dn->dn_notxholds, NULL, CV_DEFAULT, NULL); in dnode_cons()
124 cv_init(&dn->dn_nodnholds, NULL, CV_DEFAULT, NULL); in dnode_cons()
130 zfs_refcount_create_untracked(&dn->dn_holds); in dnode_cons()
131 zfs_refcount_create(&dn->dn_tx_holds); in dnode_cons()
132 list_link_init(&dn->dn_link); in dnode_cons()
134 bzero(&dn->dn_next_nblkptr[0], sizeof (dn->dn_next_nblkptr)); in dnode_cons()
135 bzero(&dn->dn_next_nlevels[0], sizeof (dn->dn_next_nlevels)); in dnode_cons()
136 bzero(&dn->dn_next_indblkshift[0], sizeof (dn->dn_next_indblkshift)); in dnode_cons()
137 bzero(&dn->dn_next_bonustype[0], sizeof (dn->dn_next_bonustype)); in dnode_cons()
138 bzero(&dn->dn_rm_spillblk[0], sizeof (dn->dn_rm_spillblk)); in dnode_cons()
139 bzero(&dn->dn_next_bonuslen[0], sizeof (dn->dn_next_bonuslen)); in dnode_cons()
140 bzero(&dn->dn_next_blksz[0], sizeof (dn->dn_next_blksz)); in dnode_cons()
141 bzero(&dn->dn_next_maxblkid[0], sizeof (dn->dn_next_maxblkid)); in dnode_cons()
144 multilist_link_init(&dn->dn_dirty_link[i]); in dnode_cons()
145 dn->dn_free_ranges[i] = NULL; in dnode_cons()
146 list_create(&dn->dn_dirty_records[i], in dnode_cons()
151 dn->dn_allocated_txg = 0; in dnode_cons()
152 dn->dn_free_txg = 0; in dnode_cons()
153 dn->dn_assigned_txg = 0; in dnode_cons()
154 dn->dn_dirty_txg = 0; in dnode_cons()
155 dn->dn_dirtyctx = 0; in dnode_cons()
156 dn->dn_dirtyctx_firstset = NULL; in dnode_cons()
157 dn->dn_bonus = NULL; in dnode_cons()
158 dn->dn_have_spill = B_FALSE; in dnode_cons()
159 dn->dn_zio = NULL; in dnode_cons()
160 dn->dn_oldused = 0; in dnode_cons()
161 dn->dn_oldflags = 0; in dnode_cons()
162 dn->dn_olduid = 0; in dnode_cons()
163 dn->dn_oldgid = 0; in dnode_cons()
164 dn->dn_oldprojid = ZFS_DEFAULT_PROJID; in dnode_cons()
165 dn->dn_newuid = 0; in dnode_cons()
166 dn->dn_newgid = 0; in dnode_cons()
167 dn->dn_newprojid = ZFS_DEFAULT_PROJID; in dnode_cons()
168 dn->dn_id_flags = 0; in dnode_cons()
170 dn->dn_dbufs_count = 0; in dnode_cons()
171 avl_create(&dn->dn_dbufs, dbuf_compare, sizeof (dmu_buf_impl_t), in dnode_cons()
174 dn->dn_moved = 0; in dnode_cons()
183 dnode_t *dn = arg; in dnode_dest() local
185 rw_destroy(&dn->dn_struct_rwlock); in dnode_dest()
186 mutex_destroy(&dn->dn_mtx); in dnode_dest()
187 mutex_destroy(&dn->dn_dbufs_mtx); in dnode_dest()
188 cv_destroy(&dn->dn_notxholds); in dnode_dest()
189 cv_destroy(&dn->dn_nodnholds); in dnode_dest()
190 zfs_refcount_destroy(&dn->dn_holds); in dnode_dest()
191 zfs_refcount_destroy(&dn->dn_tx_holds); in dnode_dest()
192 ASSERT(!list_link_active(&dn->dn_link)); in dnode_dest()
195 ASSERT(!multilist_link_active(&dn->dn_dirty_link[i])); in dnode_dest()
196 ASSERT3P(dn->dn_free_ranges[i], ==, NULL); in dnode_dest()
197 list_destroy(&dn->dn_dirty_records[i]); in dnode_dest()
198 ASSERT0(dn->dn_next_nblkptr[i]); in dnode_dest()
199 ASSERT0(dn->dn_next_nlevels[i]); in dnode_dest()
200 ASSERT0(dn->dn_next_indblkshift[i]); in dnode_dest()
201 ASSERT0(dn->dn_next_bonustype[i]); in dnode_dest()
202 ASSERT0(dn->dn_rm_spillblk[i]); in dnode_dest()
203 ASSERT0(dn->dn_next_bonuslen[i]); in dnode_dest()
204 ASSERT0(dn->dn_next_blksz[i]); in dnode_dest()
205 ASSERT0(dn->dn_next_maxblkid[i]); in dnode_dest()
208 ASSERT0(dn->dn_allocated_txg); in dnode_dest()
209 ASSERT0(dn->dn_free_txg); in dnode_dest()
210 ASSERT0(dn->dn_assigned_txg); in dnode_dest()
211 ASSERT0(dn->dn_dirty_txg); in dnode_dest()
212 ASSERT0(dn->dn_dirtyctx); in dnode_dest()
213 ASSERT3P(dn->dn_dirtyctx_firstset, ==, NULL); in dnode_dest()
214 ASSERT3P(dn->dn_bonus, ==, NULL); in dnode_dest()
215 ASSERT(!dn->dn_have_spill); in dnode_dest()
216 ASSERT3P(dn->dn_zio, ==, NULL); in dnode_dest()
217 ASSERT0(dn->dn_oldused); in dnode_dest()
218 ASSERT0(dn->dn_oldflags); in dnode_dest()
219 ASSERT0(dn->dn_olduid); in dnode_dest()
220 ASSERT0(dn->dn_oldgid); in dnode_dest()
221 ASSERT0(dn->dn_oldprojid); in dnode_dest()
222 ASSERT0(dn->dn_newuid); in dnode_dest()
223 ASSERT0(dn->dn_newgid); in dnode_dest()
224 ASSERT0(dn->dn_newprojid); in dnode_dest()
225 ASSERT0(dn->dn_id_flags); in dnode_dest()
227 ASSERT0(dn->dn_dbufs_count); in dnode_dest()
228 avl_destroy(&dn->dn_dbufs); in dnode_dest()
266 dnode_verify(dnode_t *dn) in dnode_verify() argument
270 ASSERT(dn->dn_phys); in dnode_verify()
271 ASSERT(dn->dn_objset); in dnode_verify()
272 ASSERT(dn->dn_handle->dnh_dnode == dn); in dnode_verify()
274 ASSERT(DMU_OT_IS_VALID(dn->dn_phys->dn_type)); in dnode_verify()
279 if (!RW_WRITE_HELD(&dn->dn_struct_rwlock)) { in dnode_verify()
280 rw_enter(&dn->dn_struct_rwlock, RW_READER); in dnode_verify()
283 if (dn->dn_phys->dn_type != DMU_OT_NONE || dn->dn_allocated_txg != 0) { in dnode_verify()
285 int max_bonuslen = DN_SLOTS_TO_BONUSLEN(dn->dn_num_slots); in dnode_verify()
286 ASSERT3U(dn->dn_indblkshift, >=, 0); in dnode_verify()
287 ASSERT3U(dn->dn_indblkshift, <=, SPA_MAXBLOCKSHIFT); in dnode_verify()
288 if (dn->dn_datablkshift) { in dnode_verify()
289 ASSERT3U(dn->dn_datablkshift, >=, SPA_MINBLOCKSHIFT); in dnode_verify()
290 ASSERT3U(dn->dn_datablkshift, <=, SPA_MAXBLOCKSHIFT); in dnode_verify()
291 ASSERT3U(1<<dn->dn_datablkshift, ==, dn->dn_datablksz); in dnode_verify()
293 ASSERT3U(dn->dn_nlevels, <=, 30); in dnode_verify()
294 ASSERT(DMU_OT_IS_VALID(dn->dn_type)); in dnode_verify()
295 ASSERT3U(dn->dn_nblkptr, >=, 1); in dnode_verify()
296 ASSERT3U(dn->dn_nblkptr, <=, DN_MAX_NBLKPTR); in dnode_verify()
297 ASSERT3U(dn->dn_bonuslen, <=, max_bonuslen); in dnode_verify()
298 ASSERT3U(dn->dn_datablksz, ==, in dnode_verify()
299 dn->dn_datablkszsec << SPA_MINBLOCKSHIFT); in dnode_verify()
300 ASSERT3U(ISP2(dn->dn_datablksz), ==, dn->dn_datablkshift != 0); in dnode_verify()
301 ASSERT3U((dn->dn_nblkptr - 1) * sizeof (blkptr_t) + in dnode_verify()
302 dn->dn_bonuslen, <=, max_bonuslen); in dnode_verify()
304 ASSERT3U(dn->dn_next_nlevels[i], <=, dn->dn_nlevels); in dnode_verify()
307 if (dn->dn_phys->dn_type != DMU_OT_NONE) in dnode_verify()
308 ASSERT3U(dn->dn_phys->dn_nlevels, <=, dn->dn_nlevels); in dnode_verify()
309 ASSERT(DMU_OBJECT_IS_SPECIAL(dn->dn_object) || dn->dn_dbuf != NULL); in dnode_verify()
310 if (dn->dn_dbuf != NULL) { in dnode_verify()
311 ASSERT3P(dn->dn_phys, ==, in dnode_verify()
312 (dnode_phys_t *)dn->dn_dbuf->db.db_data + in dnode_verify()
313 (dn->dn_object % (dn->dn_dbuf->db.db_size >> DNODE_SHIFT))); in dnode_verify()
316 rw_exit(&dn->dn_struct_rwlock); in dnode_verify()
384 dnode_setbonuslen(dnode_t *dn, int newsize, dmu_tx_t *tx) in dnode_setbonuslen() argument
386 ASSERT3U(zfs_refcount_count(&dn->dn_holds), >=, 1); in dnode_setbonuslen()
388 dnode_setdirty(dn, tx); in dnode_setbonuslen()
389 rw_enter(&dn->dn_struct_rwlock, RW_WRITER); in dnode_setbonuslen()
390 ASSERT3U(newsize, <=, DN_SLOTS_TO_BONUSLEN(dn->dn_num_slots) - in dnode_setbonuslen()
391 (dn->dn_nblkptr-1) * sizeof (blkptr_t)); in dnode_setbonuslen()
392 dn->dn_bonuslen = newsize; in dnode_setbonuslen()
394 dn->dn_next_bonuslen[tx->tx_txg & TXG_MASK] = DN_ZERO_BONUSLEN; in dnode_setbonuslen()
396 dn->dn_next_bonuslen[tx->tx_txg & TXG_MASK] = dn->dn_bonuslen; in dnode_setbonuslen()
397 rw_exit(&dn->dn_struct_rwlock); in dnode_setbonuslen()
401 dnode_setbonus_type(dnode_t *dn, dmu_object_type_t newtype, dmu_tx_t *tx) in dnode_setbonus_type() argument
403 ASSERT3U(zfs_refcount_count(&dn->dn_holds), >=, 1); in dnode_setbonus_type()
404 dnode_setdirty(dn, tx); in dnode_setbonus_type()
405 rw_enter(&dn->dn_struct_rwlock, RW_WRITER); in dnode_setbonus_type()
406 dn->dn_bonustype = newtype; in dnode_setbonus_type()
407 dn->dn_next_bonustype[tx->tx_txg & TXG_MASK] = dn->dn_bonustype; in dnode_setbonus_type()
408 rw_exit(&dn->dn_struct_rwlock); in dnode_setbonus_type()
412 dnode_rm_spill(dnode_t *dn, dmu_tx_t *tx) in dnode_rm_spill() argument
414 ASSERT3U(zfs_refcount_count(&dn->dn_holds), >=, 1); in dnode_rm_spill()
415 ASSERT(RW_WRITE_HELD(&dn->dn_struct_rwlock)); in dnode_rm_spill()
416 dnode_setdirty(dn, tx); in dnode_rm_spill()
417 dn->dn_rm_spillblk[tx->tx_txg&TXG_MASK] = DN_KILL_SPILLBLK; in dnode_rm_spill()
418 dn->dn_have_spill = B_FALSE; in dnode_rm_spill()
422 dnode_setdblksz(dnode_t *dn, int size) in dnode_setdblksz() argument
428 1<<(sizeof (dn->dn_phys->dn_datablkszsec) * 8)); in dnode_setdblksz()
429 dn->dn_datablksz = size; in dnode_setdblksz()
430 dn->dn_datablkszsec = size >> SPA_MINBLOCKSHIFT; in dnode_setdblksz()
431 dn->dn_datablkshift = ISP2(size) ? highbit64(size - 1) : 0; in dnode_setdblksz()
438 dnode_t *dn; in dnode_create() local
440 dn = kmem_cache_alloc(dnode_cache, KM_SLEEP); in dnode_create()
442 ASSERT(!POINTER_IS_VALID(dn->dn_objset)); in dnode_create()
444 dn->dn_moved = 0; in dnode_create()
450 dn->dn_object = object; in dnode_create()
451 dn->dn_dbuf = db; in dnode_create()
452 dn->dn_handle = dnh; in dnode_create()
453 dn->dn_phys = dnp; in dnode_create()
456 dnode_setdblksz(dn, dnp->dn_datablkszsec << SPA_MINBLOCKSHIFT); in dnode_create()
458 dn->dn_datablksz = 0; in dnode_create()
459 dn->dn_datablkszsec = 0; in dnode_create()
460 dn->dn_datablkshift = 0; in dnode_create()
462 dn->dn_indblkshift = dnp->dn_indblkshift; in dnode_create()
463 dn->dn_nlevels = dnp->dn_nlevels; in dnode_create()
464 dn->dn_type = dnp->dn_type; in dnode_create()
465 dn->dn_nblkptr = dnp->dn_nblkptr; in dnode_create()
466 dn->dn_checksum = dnp->dn_checksum; in dnode_create()
467 dn->dn_compress = dnp->dn_compress; in dnode_create()
468 dn->dn_bonustype = dnp->dn_bonustype; in dnode_create()
469 dn->dn_bonuslen = dnp->dn_bonuslen; in dnode_create()
470 dn->dn_num_slots = dnp->dn_extra_slots + 1; in dnode_create()
471 dn->dn_maxblkid = dnp->dn_maxblkid; in dnode_create()
472 dn->dn_have_spill = ((dnp->dn_flags & DNODE_FLAG_SPILL_BLKPTR) != 0); in dnode_create()
473 dn->dn_id_flags = 0; in dnode_create()
475 dmu_zfetch_init(&dn->dn_zfetch, dn); in dnode_create()
477 ASSERT(DMU_OT_IS_VALID(dn->dn_phys->dn_type)); in dnode_create()
491 list_insert_head(&os->os_dnodes, dn); in dnode_create()
498 dn->dn_objset = os; in dnode_create()
500 dnh->dnh_dnode = dn; in dnode_create()
505 return (dn); in dnode_create()
512 dnode_destroy(dnode_t *dn) in dnode_destroy() argument
514 objset_t *os = dn->dn_objset; in dnode_destroy()
517 ASSERT((dn->dn_id_flags & DN_ID_NEW_EXIST) == 0); in dnode_destroy()
520 POINTER_INVALIDATE(&dn->dn_objset); in dnode_destroy()
521 if (!DMU_OBJECT_IS_SPECIAL(dn->dn_object)) { in dnode_destroy()
522 list_remove(&os->os_dnodes, dn); in dnode_destroy()
530 if (!zrl_is_locked(&dn->dn_handle->dnh_zrlock)) in dnode_destroy()
531 zrl_remove(&dn->dn_handle->dnh_zrlock); in dnode_destroy()
533 dn->dn_allocated_txg = 0; in dnode_destroy()
534 dn->dn_free_txg = 0; in dnode_destroy()
535 dn->dn_assigned_txg = 0; in dnode_destroy()
536 dn->dn_dirty_txg = 0; in dnode_destroy()
538 dn->dn_dirtyctx = 0; in dnode_destroy()
539 if (dn->dn_dirtyctx_firstset != NULL) { in dnode_destroy()
540 kmem_free(dn->dn_dirtyctx_firstset, 1); in dnode_destroy()
541 dn->dn_dirtyctx_firstset = NULL; in dnode_destroy()
543 if (dn->dn_bonus != NULL) { in dnode_destroy()
544 mutex_enter(&dn->dn_bonus->db_mtx); in dnode_destroy()
545 dbuf_destroy(dn->dn_bonus); in dnode_destroy()
546 dn->dn_bonus = NULL; in dnode_destroy()
548 dn->dn_zio = NULL; in dnode_destroy()
550 dn->dn_have_spill = B_FALSE; in dnode_destroy()
551 dn->dn_oldused = 0; in dnode_destroy()
552 dn->dn_oldflags = 0; in dnode_destroy()
553 dn->dn_olduid = 0; in dnode_destroy()
554 dn->dn_oldgid = 0; in dnode_destroy()
555 dn->dn_oldprojid = ZFS_DEFAULT_PROJID; in dnode_destroy()
556 dn->dn_newuid = 0; in dnode_destroy()
557 dn->dn_newgid = 0; in dnode_destroy()
558 dn->dn_newprojid = ZFS_DEFAULT_PROJID; in dnode_destroy()
559 dn->dn_id_flags = 0; in dnode_destroy()
561 dmu_zfetch_fini(&dn->dn_zfetch); in dnode_destroy()
562 kmem_cache_free(dnode_cache, dn); in dnode_destroy()
570 dnode_allocate(dnode_t *dn, dmu_object_type_t ot, int blocksize, int ibs, in dnode_allocate() argument
577 spa_maxdnodesize(dmu_objset_spa(dn->dn_objset))); in dnode_allocate()
579 spa_maxblocksize(dmu_objset_spa(dn->dn_objset))); in dnode_allocate()
592 dn->dn_objset, dn->dn_object, tx->tx_txg, blocksize, ibs, dn_slots); in dnode_allocate()
595 ASSERT(dn->dn_type == DMU_OT_NONE); in dnode_allocate()
596 ASSERT(bcmp(dn->dn_phys, &dnode_phys_zero, sizeof (dnode_phys_t)) == 0); in dnode_allocate()
597 ASSERT(dn->dn_phys->dn_type == DMU_OT_NONE); in dnode_allocate()
605 ASSERT(dn->dn_type == DMU_OT_NONE); in dnode_allocate()
606 ASSERT0(dn->dn_maxblkid); in dnode_allocate()
607 ASSERT0(dn->dn_allocated_txg); in dnode_allocate()
608 ASSERT0(dn->dn_dirty_txg); in dnode_allocate()
609 ASSERT0(dn->dn_assigned_txg); in dnode_allocate()
610 ASSERT(zfs_refcount_is_zero(&dn->dn_tx_holds)); in dnode_allocate()
611 ASSERT3U(zfs_refcount_count(&dn->dn_holds), <=, 1); in dnode_allocate()
612 ASSERT(avl_is_empty(&dn->dn_dbufs)); in dnode_allocate()
615 ASSERT0(dn->dn_next_nblkptr[i]); in dnode_allocate()
616 ASSERT0(dn->dn_next_nlevels[i]); in dnode_allocate()
617 ASSERT0(dn->dn_next_indblkshift[i]); in dnode_allocate()
618 ASSERT0(dn->dn_next_bonuslen[i]); in dnode_allocate()
619 ASSERT0(dn->dn_next_bonustype[i]); in dnode_allocate()
620 ASSERT0(dn->dn_rm_spillblk[i]); in dnode_allocate()
621 ASSERT0(dn->dn_next_blksz[i]); in dnode_allocate()
622 ASSERT0(dn->dn_next_maxblkid[i]); in dnode_allocate()
623 ASSERT(!multilist_link_active(&dn->dn_dirty_link[i])); in dnode_allocate()
624 ASSERT3P(list_head(&dn->dn_dirty_records[i]), ==, NULL); in dnode_allocate()
625 ASSERT3P(dn->dn_free_ranges[i], ==, NULL); in dnode_allocate()
628 dn->dn_type = ot; in dnode_allocate()
629 dnode_setdblksz(dn, blocksize); in dnode_allocate()
630 dn->dn_indblkshift = ibs; in dnode_allocate()
631 dn->dn_nlevels = 1; in dnode_allocate()
632 dn->dn_num_slots = dn_slots; in dnode_allocate()
634 dn->dn_nblkptr = 1; in dnode_allocate()
636 dn->dn_nblkptr = MIN(DN_MAX_NBLKPTR, in dnode_allocate()
641 dn->dn_bonustype = bonustype; in dnode_allocate()
642 dn->dn_bonuslen = bonuslen; in dnode_allocate()
643 dn->dn_checksum = ZIO_CHECKSUM_INHERIT; in dnode_allocate()
644 dn->dn_compress = ZIO_COMPRESS_INHERIT; in dnode_allocate()
645 dn->dn_dirtyctx = 0; in dnode_allocate()
647 dn->dn_free_txg = 0; in dnode_allocate()
648 if (dn->dn_dirtyctx_firstset) { in dnode_allocate()
649 kmem_free(dn->dn_dirtyctx_firstset, 1); in dnode_allocate()
650 dn->dn_dirtyctx_firstset = NULL; in dnode_allocate()
653 dn->dn_allocated_txg = tx->tx_txg; in dnode_allocate()
654 dn->dn_id_flags = 0; in dnode_allocate()
656 dnode_setdirty(dn, tx); in dnode_allocate()
657 dn->dn_next_indblkshift[tx->tx_txg & TXG_MASK] = ibs; in dnode_allocate()
658 dn->dn_next_bonuslen[tx->tx_txg & TXG_MASK] = dn->dn_bonuslen; in dnode_allocate()
659 dn->dn_next_bonustype[tx->tx_txg & TXG_MASK] = dn->dn_bonustype; in dnode_allocate()
660 dn->dn_next_blksz[tx->tx_txg & TXG_MASK] = dn->dn_datablksz; in dnode_allocate()
664 dnode_reallocate(dnode_t *dn, dmu_object_type_t ot, int blocksize, in dnode_reallocate() argument
672 spa_maxblocksize(dmu_objset_spa(dn->dn_objset))); in dnode_reallocate()
674 ASSERT(dn->dn_object != DMU_META_DNODE_OBJECT || dmu_tx_private_ok(tx)); in dnode_reallocate()
681 DN_BONUS_SIZE(spa_maxdnodesize(dmu_objset_spa(dn->dn_objset)))); in dnode_reallocate()
684 dnode_free_interior_slots(dn); in dnode_reallocate()
688 dnode_evict_dbufs(dn); in dnode_reallocate()
690 dn->dn_id_flags = 0; in dnode_reallocate()
692 rw_enter(&dn->dn_struct_rwlock, RW_WRITER); in dnode_reallocate()
693 dnode_setdirty(dn, tx); in dnode_reallocate()
694 if (dn->dn_datablksz != blocksize) { in dnode_reallocate()
696 ASSERT(dn->dn_maxblkid == 0 && in dnode_reallocate()
697 (BP_IS_HOLE(&dn->dn_phys->dn_blkptr[0]) || in dnode_reallocate()
698 dnode_block_freed(dn, 0))); in dnode_reallocate()
699 dnode_setdblksz(dn, blocksize); in dnode_reallocate()
700 dn->dn_next_blksz[tx->tx_txg&TXG_MASK] = blocksize; in dnode_reallocate()
702 if (dn->dn_bonuslen != bonuslen) in dnode_reallocate()
703 dn->dn_next_bonuslen[tx->tx_txg&TXG_MASK] = bonuslen; in dnode_reallocate()
711 if (dn->dn_bonustype != bonustype) in dnode_reallocate()
712 dn->dn_next_bonustype[tx->tx_txg&TXG_MASK] = bonustype; in dnode_reallocate()
713 if (dn->dn_nblkptr != nblkptr) in dnode_reallocate()
714 dn->dn_next_nblkptr[tx->tx_txg&TXG_MASK] = nblkptr; in dnode_reallocate()
715 if (dn->dn_phys->dn_flags & DNODE_FLAG_SPILL_BLKPTR && !keep_spill) { in dnode_reallocate()
716 dbuf_rm_spill(dn, tx); in dnode_reallocate()
717 dnode_rm_spill(dn, tx); in dnode_reallocate()
719 rw_exit(&dn->dn_struct_rwlock); in dnode_reallocate()
722 dn->dn_type = ot; in dnode_reallocate()
725 mutex_enter(&dn->dn_mtx); in dnode_reallocate()
726 dn->dn_bonustype = bonustype; in dnode_reallocate()
727 dn->dn_bonuslen = bonuslen; in dnode_reallocate()
728 dn->dn_num_slots = dn_slots; in dnode_reallocate()
729 dn->dn_nblkptr = nblkptr; in dnode_reallocate()
730 dn->dn_checksum = ZIO_CHECKSUM_INHERIT; in dnode_reallocate()
731 dn->dn_compress = ZIO_COMPRESS_INHERIT; in dnode_reallocate()
732 ASSERT3U(dn->dn_nblkptr, <=, DN_MAX_NBLKPTR); in dnode_reallocate()
735 if (dn->dn_bonus) { in dnode_reallocate()
736 dn->dn_bonus->db.db_size = in dnode_reallocate()
737 DN_SLOTS_TO_BONUSLEN(dn->dn_num_slots) - in dnode_reallocate()
738 (dn->dn_nblkptr - 1) * sizeof (blkptr_t); in dnode_reallocate()
739 ASSERT(dn->dn_bonuslen <= dn->dn_bonus->db.db_size); in dnode_reallocate()
742 dn->dn_allocated_txg = tx->tx_txg; in dnode_reallocate()
743 mutex_exit(&dn->dn_mtx); in dnode_reallocate()
1107 dnode_t *dn = dnh->dnh_dnode; in dnode_check_slots_free() local
1109 if (dn == DN_SLOT_FREE) { in dnode_check_slots_free()
1111 } else if (DN_SLOT_IS_PTR(dn)) { in dnode_check_slots_free()
1112 mutex_enter(&dn->dn_mtx); in dnode_check_slots_free()
1113 boolean_t can_free = (dn->dn_type == DMU_OT_NONE && in dnode_check_slots_free()
1114 zfs_refcount_is_zero(&dn->dn_holds) && in dnode_check_slots_free()
1115 !DNODE_IS_DIRTY(dn)); in dnode_check_slots_free()
1116 mutex_exit(&dn->dn_mtx); in dnode_check_slots_free()
1149 dnode_free_interior_slots(dnode_t *dn) in dnode_free_interior_slots() argument
1151 dnode_children_t *children = dmu_buf_get_user(&dn->dn_dbuf->db); in dnode_free_interior_slots()
1152 int epb = dn->dn_dbuf->db.db_size >> DNODE_SHIFT; in dnode_free_interior_slots()
1153 int idx = (dn->dn_object & (epb - 1)) + 1; in dnode_free_interior_slots()
1154 int slots = dn->dn_num_slots - 1; in dnode_free_interior_slots()
1171 dnode_t *dn = dnh->dnh_dnode; in dnode_special_close() local
1177 mutex_enter(&dn->dn_mtx); in dnode_special_close()
1178 if (zfs_refcount_count(&dn->dn_holds) > 0) in dnode_special_close()
1179 cv_wait(&dn->dn_nodnholds, &dn->dn_mtx); in dnode_special_close()
1180 mutex_exit(&dn->dn_mtx); in dnode_special_close()
1181 ASSERT3U(zfs_refcount_count(&dn->dn_holds), ==, 0); in dnode_special_close()
1183 ASSERT(dn->dn_dbuf == NULL || in dnode_special_close()
1184 dmu_buf_get_user(&dn->dn_dbuf->db) == NULL); in dnode_special_close()
1186 dnode_destroy(dn); /* implicit zrl_remove() */ in dnode_special_close()
1195 dnode_t *dn; in dnode_special_open() local
1200 dn = dnode_create(os, dnp, NULL, object, dnh); in dnode_special_open()
1201 DNODE_VERIFY(dn); in dnode_special_open()
1215 dnode_t *dn; in dnode_buf_evict_async() local
1229 dn = dnh->dnh_dnode; in dnode_buf_evict_async()
1236 ASSERT(zfs_refcount_is_zero(&dn->dn_holds)); in dnode_buf_evict_async()
1237 ASSERT(zfs_refcount_is_zero(&dn->dn_tx_holds)); in dnode_buf_evict_async()
1239 dnode_destroy(dn); /* implicit zrl_remove() for first slot */ in dnode_buf_evict_async()
1283 dnode_t *mdn, *dn; in dnode_hold_impl() local
1308 dn = DMU_USERUSED_DNODE(os); in dnode_hold_impl()
1310 dn = DMU_GROUPUSED_DNODE(os); in dnode_hold_impl()
1312 dn = DMU_PROJECTUSED_DNODE(os); in dnode_hold_impl()
1313 if (dn == NULL) in dnode_hold_impl()
1315 type = dn->dn_type; in dnode_hold_impl()
1320 DNODE_VERIFY(dn); in dnode_hold_impl()
1323 (void) zfs_refcount_add(&dn->dn_holds, tag); in dnode_hold_impl()
1324 *dnp = dn; in dnode_hold_impl()
1424 dn = dnh->dnh_dnode; in dnode_hold_impl()
1447 dn = dnh->dnh_dnode; in dnode_hold_impl()
1449 dn = dnode_create(os, dn_block + idx, db, in dnode_hold_impl()
1454 mutex_enter(&dn->dn_mtx); in dnode_hold_impl()
1455 if (dn->dn_type == DMU_OT_NONE || dn->dn_free_txg != 0) { in dnode_hold_impl()
1457 mutex_exit(&dn->dn_mtx); in dnode_hold_impl()
1465 mutex_exit(&dn->dn_mtx); in dnode_hold_impl()
1511 dn = dnh->dnh_dnode; in dnode_hold_impl()
1513 dn = dnode_create(os, dn_block + idx, db, in dnode_hold_impl()
1517 mutex_enter(&dn->dn_mtx); in dnode_hold_impl()
1518 if (!zfs_refcount_is_zero(&dn->dn_holds) || dn->dn_free_txg) { in dnode_hold_impl()
1520 mutex_exit(&dn->dn_mtx); in dnode_hold_impl()
1528 mutex_exit(&dn->dn_mtx); in dnode_hold_impl()
1541 ASSERT0(dn->dn_free_txg); in dnode_hold_impl()
1543 if (zfs_refcount_add(&dn->dn_holds, tag) == 1) in dnode_hold_impl()
1546 mutex_exit(&dn->dn_mtx); in dnode_hold_impl()
1551 DNODE_VERIFY(dn); in dnode_hold_impl()
1552 ASSERT3P(dn->dn_dbuf, ==, db); in dnode_hold_impl()
1553 ASSERT3U(dn->dn_object, ==, object); in dnode_hold_impl()
1556 *dnp = dn; in dnode_hold_impl()
1576 dnode_add_ref(dnode_t *dn, void *tag) in dnode_add_ref() argument
1578 mutex_enter(&dn->dn_mtx); in dnode_add_ref()
1579 if (zfs_refcount_is_zero(&dn->dn_holds)) { in dnode_add_ref()
1580 mutex_exit(&dn->dn_mtx); in dnode_add_ref()
1583 VERIFY(1 < zfs_refcount_add(&dn->dn_holds, tag)); in dnode_add_ref()
1584 mutex_exit(&dn->dn_mtx); in dnode_add_ref()
1589 dnode_rele(dnode_t *dn, void *tag) in dnode_rele() argument
1591 mutex_enter(&dn->dn_mtx); in dnode_rele()
1592 dnode_rele_and_unlock(dn, tag, B_FALSE); in dnode_rele()
1596 dnode_rele_and_unlock(dnode_t *dn, void *tag, boolean_t evicting) in dnode_rele_and_unlock() argument
1600 dmu_buf_impl_t *db = dn->dn_dbuf; in dnode_rele_and_unlock()
1601 dnode_handle_t *dnh = dn->dn_handle; in dnode_rele_and_unlock()
1603 refs = zfs_refcount_remove(&dn->dn_holds, tag); in dnode_rele_and_unlock()
1605 cv_broadcast(&dn->dn_nodnholds); in dnode_rele_and_unlock()
1606 mutex_exit(&dn->dn_mtx); in dnode_rele_and_unlock()
1646 dnode_setdirty(dnode_t *dn, dmu_tx_t *tx) in dnode_setdirty() argument
1648 objset_t *os = dn->dn_objset; in dnode_setdirty()
1651 if (DMU_OBJECT_IS_SPECIAL(dn->dn_object)) { in dnode_setdirty()
1656 DNODE_VERIFY(dn); in dnode_setdirty()
1659 mutex_enter(&dn->dn_mtx); in dnode_setdirty()
1660 ASSERT(dn->dn_phys->dn_type || dn->dn_allocated_txg); in dnode_setdirty()
1661 ASSERT(dn->dn_free_txg == 0 || dn->dn_free_txg >= txg); in dnode_setdirty()
1662 mutex_exit(&dn->dn_mtx); in dnode_setdirty()
1668 dmu_objset_userquota_get_ids(dn, B_TRUE, tx); in dnode_setdirty()
1671 multilist_sublist_t *mls = multilist_sublist_lock_obj(dirtylist, dn); in dnode_setdirty()
1676 if (multilist_link_active(&dn->dn_dirty_link[txg & TXG_MASK])) { in dnode_setdirty()
1681 ASSERT(!zfs_refcount_is_zero(&dn->dn_holds) || in dnode_setdirty()
1682 !avl_is_empty(&dn->dn_dbufs)); in dnode_setdirty()
1683 ASSERT(dn->dn_datablksz != 0); in dnode_setdirty()
1684 ASSERT0(dn->dn_next_bonuslen[txg&TXG_MASK]); in dnode_setdirty()
1685 ASSERT0(dn->dn_next_blksz[txg&TXG_MASK]); in dnode_setdirty()
1686 ASSERT0(dn->dn_next_bonustype[txg&TXG_MASK]); in dnode_setdirty()
1689 dn->dn_object, txg); in dnode_setdirty()
1691 multilist_sublist_insert_head(mls, dn); in dnode_setdirty()
1704 VERIFY(dnode_add_ref(dn, (void *)(uintptr_t)tx->tx_txg)); in dnode_setdirty()
1706 (void) dbuf_dirty(dn->dn_dbuf, tx); in dnode_setdirty()
1712 dnode_free(dnode_t *dn, dmu_tx_t *tx) in dnode_free() argument
1714 mutex_enter(&dn->dn_mtx); in dnode_free()
1715 if (dn->dn_type == DMU_OT_NONE || dn->dn_free_txg) { in dnode_free()
1716 mutex_exit(&dn->dn_mtx); in dnode_free()
1719 dn->dn_free_txg = tx->tx_txg; in dnode_free()
1720 mutex_exit(&dn->dn_mtx); in dnode_free()
1722 dnode_setdirty(dn, tx); in dnode_free()
1730 dnode_set_blksz(dnode_t *dn, uint64_t size, int ibs, dmu_tx_t *tx) in dnode_set_blksz() argument
1735 ASSERT3U(size, <=, spa_maxblocksize(dmu_objset_spa(dn->dn_objset))); in dnode_set_blksz()
1741 if (ibs == dn->dn_indblkshift) in dnode_set_blksz()
1744 if (size >> SPA_MINBLOCKSHIFT == dn->dn_datablkszsec && ibs == 0) in dnode_set_blksz()
1747 rw_enter(&dn->dn_struct_rwlock, RW_WRITER); in dnode_set_blksz()
1750 if (dn->dn_maxblkid != 0) in dnode_set_blksz()
1753 mutex_enter(&dn->dn_dbufs_mtx); in dnode_set_blksz()
1754 for (db = avl_first(&dn->dn_dbufs); db != NULL; in dnode_set_blksz()
1755 db = AVL_NEXT(&dn->dn_dbufs, db)) { in dnode_set_blksz()
1758 mutex_exit(&dn->dn_dbufs_mtx); in dnode_set_blksz()
1762 mutex_exit(&dn->dn_dbufs_mtx); in dnode_set_blksz()
1764 if (ibs && dn->dn_nlevels != 1) in dnode_set_blksz()
1768 err = dbuf_hold_impl(dn, 0, 0, TRUE, FALSE, FTAG, &db); in dnode_set_blksz()
1775 dnode_setdblksz(dn, size); in dnode_set_blksz()
1776 dnode_setdirty(dn, tx); in dnode_set_blksz()
1777 dn->dn_next_blksz[tx->tx_txg&TXG_MASK] = size; in dnode_set_blksz()
1779 dn->dn_indblkshift = ibs; in dnode_set_blksz()
1780 dn->dn_next_indblkshift[tx->tx_txg&TXG_MASK] = ibs; in dnode_set_blksz()
1786 rw_exit(&dn->dn_struct_rwlock); in dnode_set_blksz()
1790 rw_exit(&dn->dn_struct_rwlock); in dnode_set_blksz()
1795 dnode_set_nlevels_impl(dnode_t *dn, int new_nlevels, dmu_tx_t *tx) in dnode_set_nlevels_impl() argument
1798 int old_nlevels = dn->dn_nlevels; in dnode_set_nlevels_impl()
1803 ASSERT(RW_WRITE_HELD(&dn->dn_struct_rwlock)); in dnode_set_nlevels_impl()
1805 dn->dn_nlevels = new_nlevels; in dnode_set_nlevels_impl()
1807 ASSERT3U(new_nlevels, >, dn->dn_next_nlevels[txgoff]); in dnode_set_nlevels_impl()
1808 dn->dn_next_nlevels[txgoff] = new_nlevels; in dnode_set_nlevels_impl()
1811 db = dbuf_hold_level(dn, old_nlevels, 0, FTAG); in dnode_set_nlevels_impl()
1817 mutex_enter(&dn->dn_mtx); in dnode_set_nlevels_impl()
1819 list = &dn->dn_dirty_records[txgoff]; in dnode_set_nlevels_impl()
1821 dr_next = list_next(&dn->dn_dirty_records[txgoff], dr); in dnode_set_nlevels_impl()
1826 list_remove(&dn->dn_dirty_records[txgoff], dr); in dnode_set_nlevels_impl()
1832 mutex_exit(&dn->dn_mtx); in dnode_set_nlevels_impl()
1836 dnode_set_nlevels(dnode_t *dn, int nlevels, dmu_tx_t *tx) in dnode_set_nlevels() argument
1840 rw_enter(&dn->dn_struct_rwlock, RW_WRITER); in dnode_set_nlevels()
1842 if (dn->dn_nlevels == nlevels) { in dnode_set_nlevels()
1845 } else if (nlevels < dn->dn_nlevels) { in dnode_set_nlevels()
1850 dnode_set_nlevels_impl(dn, nlevels, tx); in dnode_set_nlevels()
1853 rw_exit(&dn->dn_struct_rwlock); in dnode_set_nlevels()
1859 dnode_new_blkid(dnode_t *dn, uint64_t blkid, dmu_tx_t *tx, boolean_t have_read, in dnode_new_blkid() argument
1868 RW_READ_HELD(&dn->dn_struct_rwlock) : in dnode_new_blkid()
1869 RW_WRITE_HELD(&dn->dn_struct_rwlock)); in dnode_new_blkid()
1876 if (blkid <= dn->dn_maxblkid) in dnode_new_blkid()
1879 if (!rw_tryupgrade(&dn->dn_struct_rwlock)) { in dnode_new_blkid()
1880 rw_exit(&dn->dn_struct_rwlock); in dnode_new_blkid()
1881 rw_enter(&dn->dn_struct_rwlock, RW_WRITER); in dnode_new_blkid()
1889 if (!force && blkid <= dn->dn_maxblkid) in dnode_new_blkid()
1897 dn->dn_maxblkid = blkid; in dnode_new_blkid()
1898 dn->dn_next_maxblkid[tx->tx_txg & TXG_MASK] = in dnode_new_blkid()
1906 epbs = dn->dn_indblkshift - SPA_BLKPTRSHIFT; in dnode_new_blkid()
1907 for (sz = dn->dn_nblkptr; in dnode_new_blkid()
1908 sz <= blkid && sz >= dn->dn_nblkptr; sz <<= epbs) in dnode_new_blkid()
1912 if (new_nlevels > dn->dn_nlevels) in dnode_new_blkid()
1913 dnode_set_nlevels_impl(dn, new_nlevels, tx); in dnode_new_blkid()
1915 ASSERT3U(dn->dn_nlevels, >=, new_nlevels); in dnode_new_blkid()
1920 rw_downgrade(&dn->dn_struct_rwlock); in dnode_new_blkid()
1924 dnode_dirty_l1(dnode_t *dn, uint64_t l1blkid, dmu_tx_t *tx) in dnode_dirty_l1() argument
1926 dmu_buf_impl_t *db = dbuf_hold_level(dn, 1, l1blkid, FTAG); in dnode_dirty_l1()
1938 dnode_dirty_l1range(dnode_t *dn, uint64_t start_blkid, uint64_t end_blkid, in dnode_dirty_l1range() argument
1945 mutex_enter(&dn->dn_dbufs_mtx); in dnode_dirty_l1range()
1952 db = avl_find(&dn->dn_dbufs, &db_search, &where); in dnode_dirty_l1range()
1954 db = avl_nearest(&dn->dn_dbufs, where, AVL_AFTER); in dnode_dirty_l1range()
1975 mutex_exit(&dn->dn_dbufs_mtx); in dnode_dirty_l1range()
1976 dnode_dirty_l1(dn, db->db_blkid, tx); in dnode_dirty_l1range()
1977 mutex_enter(&dn->dn_dbufs_mtx); in dnode_dirty_l1range()
1987 db = avl_find(&dn->dn_dbufs, &db_search, &where); in dnode_dirty_l1range()
1989 db = avl_nearest(&dn->dn_dbufs, where, AVL_AFTER); in dnode_dirty_l1range()
1990 for (; db != NULL; db = AVL_NEXT(&dn->dn_dbufs, db)) { in dnode_dirty_l1range()
1996 mutex_exit(&dn->dn_dbufs_mtx); in dnode_dirty_l1range()
2000 dnode_free_range(dnode_t *dn, uint64_t off, uint64_t len, dmu_tx_t *tx) in dnode_free_range() argument
2008 blksz = dn->dn_datablksz; in dnode_free_range()
2009 blkshift = dn->dn_datablkshift; in dnode_free_range()
2010 epbs = dn->dn_indblkshift - SPA_BLKPTRSHIFT; in dnode_free_range()
2023 if ((off >> blkshift) > dn->dn_maxblkid) in dnode_free_range()
2026 ASSERT(dn->dn_maxblkid == 0); in dnode_free_range()
2033 if (dn->dn_nlevels > 1) { in dnode_free_range()
2034 rw_enter(&dn->dn_struct_rwlock, RW_WRITER); in dnode_free_range()
2035 dnode_dirty_l1(dn, 0, tx); in dnode_free_range()
2036 rw_exit(&dn->dn_struct_rwlock); in dnode_free_range()
2055 rw_enter(&dn->dn_struct_rwlock, RW_READER); in dnode_free_range()
2056 res = dbuf_hold_impl(dn, 0, dbuf_whichblock(dn, 0, off), in dnode_free_range()
2058 rw_exit(&dn->dn_struct_rwlock); in dnode_free_range()
2085 if ((off >> blkshift) > dn->dn_maxblkid) in dnode_free_range()
2100 rw_enter(&dn->dn_struct_rwlock, RW_READER); in dnode_free_range()
2101 res = dbuf_hold_impl(dn, 0, dbuf_whichblock(dn, 0, off+len), in dnode_free_range()
2103 rw_exit(&dn->dn_struct_rwlock); in dnode_free_range()
2152 if (dn->dn_nlevels > 1) { in dnode_free_range()
2153 rw_enter(&dn->dn_struct_rwlock, RW_WRITER); in dnode_free_range()
2157 dnode_dirty_l1(dn, first, tx); in dnode_free_range()
2159 last = dn->dn_maxblkid >> epbs; in dnode_free_range()
2163 dnode_dirty_l1(dn, last, tx); in dnode_free_range()
2165 dnode_dirty_l1range(dn, first, last, tx); in dnode_free_range()
2167 int shift = dn->dn_datablkshift + dn->dn_indblkshift - in dnode_free_range()
2177 int err = dnode_next_offset(dn, DNODE_FIND_HAVELOCK, in dnode_free_range()
2196 dnode_dirty_l1(dn, i, tx); in dnode_free_range()
2198 rw_exit(&dn->dn_struct_rwlock); in dnode_free_range()
2206 mutex_enter(&dn->dn_mtx); in dnode_free_range()
2208 if (dn->dn_free_ranges[txgoff] == NULL) { in dnode_free_range()
2209 dn->dn_free_ranges[txgoff] = range_tree_create(NULL, in dnode_free_range()
2212 range_tree_clear(dn->dn_free_ranges[txgoff], blkid, nblks); in dnode_free_range()
2213 range_tree_add(dn->dn_free_ranges[txgoff], blkid, nblks); in dnode_free_range()
2214 dprintf_dnode(dn, "blkid=%llu nblks=%llu txg=%llu\n", in dnode_free_range()
2216 mutex_exit(&dn->dn_mtx); in dnode_free_range()
2218 dbuf_free_range(dn, blkid, blkid + nblks - 1, tx); in dnode_free_range()
2219 dnode_setdirty(dn, tx); in dnode_free_range()
2223 dnode_spill_freed(dnode_t *dn) in dnode_spill_freed() argument
2227 mutex_enter(&dn->dn_mtx); in dnode_spill_freed()
2229 if (dn->dn_rm_spillblk[i] == DN_KILL_SPILLBLK) in dnode_spill_freed()
2232 mutex_exit(&dn->dn_mtx); in dnode_spill_freed()
2238 dnode_block_freed(dnode_t *dn, uint64_t blkid) in dnode_block_freed() argument
2240 void *dp = spa_get_dsl(dn->dn_objset->os_spa); in dnode_block_freed()
2253 if (dn->dn_free_txg) in dnode_block_freed()
2257 return (dnode_spill_freed(dn)); in dnode_block_freed()
2259 mutex_enter(&dn->dn_mtx); in dnode_block_freed()
2261 if (dn->dn_free_ranges[i] != NULL && in dnode_block_freed()
2262 range_tree_contains(dn->dn_free_ranges[i], blkid, 1)) in dnode_block_freed()
2265 mutex_exit(&dn->dn_mtx); in dnode_block_freed()
2271 dnode_diduse_space(dnode_t *dn, int64_t delta) in dnode_diduse_space() argument
2274 dprintf_dnode(dn, "dn=%p dnp=%p used=%llu delta=%lld\n", in dnode_diduse_space()
2275 dn, dn->dn_phys, in dnode_diduse_space()
2276 (u_longlong_t)dn->dn_phys->dn_used, in dnode_diduse_space()
2279 mutex_enter(&dn->dn_mtx); in dnode_diduse_space()
2280 space = DN_USED_BYTES(dn->dn_phys); in dnode_diduse_space()
2287 if (spa_version(dn->dn_objset->os_spa) < SPA_VERSION_DNODE_BYTES) { in dnode_diduse_space()
2288 ASSERT((dn->dn_phys->dn_flags & DNODE_FLAG_USED_BYTES) == 0); in dnode_diduse_space()
2290 dn->dn_phys->dn_used = space >> DEV_BSHIFT; in dnode_diduse_space()
2292 dn->dn_phys->dn_used = space; in dnode_diduse_space()
2293 dn->dn_phys->dn_flags |= DNODE_FLAG_USED_BYTES; in dnode_diduse_space()
2295 mutex_exit(&dn->dn_mtx); in dnode_diduse_space()
2317 dnode_next_offset_level(dnode_t *dn, int flags, uint64_t *offset, in dnode_next_offset_level() argument
2322 uint64_t epbs = dn->dn_phys->dn_indblkshift - SPA_BLKPTRSHIFT; in dnode_next_offset_level()
2329 dn->dn_object, *offset, lvl, dn->dn_phys->dn_nlevels); in dnode_next_offset_level()
2331 ASSERT(RW_LOCK_HELD(&dn->dn_struct_rwlock)); in dnode_next_offset_level()
2337 if (lvl == dn->dn_phys->dn_nlevels) { in dnode_next_offset_level()
2339 epb = dn->dn_phys->dn_nblkptr; in dnode_next_offset_level()
2340 data = dn->dn_phys->dn_blkptr; in dnode_next_offset_level()
2342 uint64_t blkid = dbuf_whichblock(dn, lvl, *offset); in dnode_next_offset_level()
2343 error = dbuf_hold_impl(dn, lvl, blkid, TRUE, FALSE, FTAG, &db); in dnode_next_offset_level()
2379 ASSERT(dn->dn_type == DMU_OT_DNODE); in dnode_next_offset_level()
2396 span = (lvl - 1) * epbs + dn->dn_datablkshift; in dnode_next_offset_level()
2459 dnode_next_offset(dnode_t *dn, int flags, uint64_t *offset, in dnode_next_offset() argument
2467 rw_enter(&dn->dn_struct_rwlock, RW_READER); in dnode_next_offset()
2469 if (dn->dn_phys->dn_nlevels == 0) { in dnode_next_offset()
2474 if (dn->dn_datablkshift == 0) { in dnode_next_offset()
2475 if (*offset < dn->dn_datablksz) { in dnode_next_offset()
2477 *offset = dn->dn_datablksz; in dnode_next_offset()
2484 maxlvl = dn->dn_phys->dn_nlevels; in dnode_next_offset()
2487 error = dnode_next_offset_level(dn, in dnode_next_offset()
2494 error = dnode_next_offset_level(dn, in dnode_next_offset()
2512 rw_exit(&dn->dn_struct_rwlock); in dnode_next_offset()