191 |
192 |
192 ASSERT(dn->dn_phys); |
193 ASSERT(dn->dn_phys); |
193 ASSERT(dn->dn_objset); |
194 ASSERT(dn->dn_objset); |
194 ASSERT(dn->dn_handle->dnh_dnode == dn); |
195 ASSERT(dn->dn_handle->dnh_dnode == dn); |
195 |
196 |
196 ASSERT(dn->dn_phys->dn_type < DMU_OT_NUMTYPES); |
197 ASSERT(DMU_OT_IS_VALID(dn->dn_phys->dn_type)); |
197 |
198 |
198 if (!(zfs_flags & ZFS_DEBUG_DNODE_VERIFY)) |
199 if (!(zfs_flags & ZFS_DEBUG_DNODE_VERIFY)) |
199 return; |
200 return; |
200 |
201 |
201 if (!RW_WRITE_HELD(&dn->dn_struct_rwlock)) { |
202 if (!RW_WRITE_HELD(&dn->dn_struct_rwlock)) { |
210 ASSERT3U(dn->dn_datablkshift, >=, SPA_MINBLOCKSHIFT); |
211 ASSERT3U(dn->dn_datablkshift, >=, SPA_MINBLOCKSHIFT); |
211 ASSERT3U(dn->dn_datablkshift, <=, SPA_MAXBLOCKSHIFT); |
212 ASSERT3U(dn->dn_datablkshift, <=, SPA_MAXBLOCKSHIFT); |
212 ASSERT3U(1<<dn->dn_datablkshift, ==, dn->dn_datablksz); |
213 ASSERT3U(1<<dn->dn_datablkshift, ==, dn->dn_datablksz); |
213 } |
214 } |
214 ASSERT3U(dn->dn_nlevels, <=, 30); |
215 ASSERT3U(dn->dn_nlevels, <=, 30); |
215 ASSERT3U(dn->dn_type, <=, DMU_OT_NUMTYPES); |
216 ASSERT(DMU_OT_IS_VALID(dn->dn_type)); |
216 ASSERT3U(dn->dn_nblkptr, >=, 1); |
217 ASSERT3U(dn->dn_nblkptr, >=, 1); |
217 ASSERT3U(dn->dn_nblkptr, <=, DN_MAX_NBLKPTR); |
218 ASSERT3U(dn->dn_nblkptr, <=, DN_MAX_NBLKPTR); |
218 ASSERT3U(dn->dn_bonuslen, <=, DN_MAX_BONUSLEN); |
219 ASSERT3U(dn->dn_bonuslen, <=, DN_MAX_BONUSLEN); |
219 ASSERT3U(dn->dn_datablksz, ==, |
220 ASSERT3U(dn->dn_datablksz, ==, |
220 dn->dn_datablkszsec << SPA_MINBLOCKSHIFT); |
221 dn->dn_datablkszsec << SPA_MINBLOCKSHIFT); |
276 * pointer (instead of packing it against the end of the |
277 * pointer (instead of packing it against the end of the |
277 * dnode buffer). |
278 * dnode buffer). |
278 */ |
279 */ |
279 int off = (dnp->dn_nblkptr-1) * sizeof (blkptr_t); |
280 int off = (dnp->dn_nblkptr-1) * sizeof (blkptr_t); |
280 size_t len = DN_MAX_BONUSLEN - off; |
281 size_t len = DN_MAX_BONUSLEN - off; |
281 ASSERT3U(dnp->dn_bonustype, <, DMU_OT_NUMTYPES); |
282 ASSERT(DMU_OT_IS_VALID(dnp->dn_bonustype)); |
282 dmu_ot[dnp->dn_bonustype].ot_byteswap(dnp->dn_bonus + off, len); |
283 dmu_object_byteswap_t byteswap = |
|
284 DMU_OT_BYTESWAP(dnp->dn_bonustype); |
|
285 dmu_ot_byteswap[byteswap].ob_func(dnp->dn_bonus + off, len); |
283 } |
286 } |
284 |
287 |
285 /* Swap SPILL block if we have one */ |
288 /* Swap SPILL block if we have one */ |
286 if (dnp->dn_flags & DNODE_FLAG_SPILL_BLKPTR) |
289 if (dnp->dn_flags & DNODE_FLAG_SPILL_BLKPTR) |
287 byteswap_uint64_array(&dnp->dn_spill, sizeof (blkptr_t)); |
290 byteswap_uint64_array(&dnp->dn_spill, sizeof (blkptr_t)); |
405 dn->dn_have_spill = ((dnp->dn_flags & DNODE_FLAG_SPILL_BLKPTR) != 0); |
408 dn->dn_have_spill = ((dnp->dn_flags & DNODE_FLAG_SPILL_BLKPTR) != 0); |
406 dn->dn_id_flags = 0; |
409 dn->dn_id_flags = 0; |
407 |
410 |
408 dmu_zfetch_init(&dn->dn_zfetch, dn); |
411 dmu_zfetch_init(&dn->dn_zfetch, dn); |
409 |
412 |
410 ASSERT(dn->dn_phys->dn_type < DMU_OT_NUMTYPES); |
413 ASSERT(DMU_OT_IS_VALID(dn->dn_phys->dn_type)); |
411 |
414 |
412 mutex_enter(&os->os_lock); |
415 mutex_enter(&os->os_lock); |
413 list_insert_head(&os->os_dnodes, dn); |
416 list_insert_head(&os->os_dnodes, dn); |
414 membar_producer(); |
417 membar_producer(); |
415 /* |
418 /* |
494 |
497 |
495 ASSERT(dn->dn_type == DMU_OT_NONE); |
498 ASSERT(dn->dn_type == DMU_OT_NONE); |
496 ASSERT(bcmp(dn->dn_phys, &dnode_phys_zero, sizeof (dnode_phys_t)) == 0); |
499 ASSERT(bcmp(dn->dn_phys, &dnode_phys_zero, sizeof (dnode_phys_t)) == 0); |
497 ASSERT(dn->dn_phys->dn_type == DMU_OT_NONE); |
500 ASSERT(dn->dn_phys->dn_type == DMU_OT_NONE); |
498 ASSERT(ot != DMU_OT_NONE); |
501 ASSERT(ot != DMU_OT_NONE); |
499 ASSERT3U(ot, <, DMU_OT_NUMTYPES); |
502 ASSERT(DMU_OT_IS_VALID(ot)); |
500 ASSERT((bonustype == DMU_OT_NONE && bonuslen == 0) || |
503 ASSERT((bonustype == DMU_OT_NONE && bonuslen == 0) || |
501 (bonustype == DMU_OT_SA && bonuslen == 0) || |
504 (bonustype == DMU_OT_SA && bonuslen == 0) || |
502 (bonustype != DMU_OT_NONE && bonuslen != 0)); |
505 (bonustype != DMU_OT_NONE && bonuslen != 0)); |
503 ASSERT3U(bonustype, <, DMU_OT_NUMTYPES); |
506 ASSERT(DMU_OT_IS_VALID(bonustype)); |
504 ASSERT3U(bonuslen, <=, DN_MAX_BONUSLEN); |
507 ASSERT3U(bonuslen, <=, DN_MAX_BONUSLEN); |
505 ASSERT(dn->dn_type == DMU_OT_NONE); |
508 ASSERT(dn->dn_type == DMU_OT_NONE); |
506 ASSERT3U(dn->dn_maxblkid, ==, 0); |
509 ASSERT3U(dn->dn_maxblkid, ==, 0); |
507 ASSERT3U(dn->dn_allocated_txg, ==, 0); |
510 ASSERT3U(dn->dn_allocated_txg, ==, 0); |
508 ASSERT3U(dn->dn_assigned_txg, ==, 0); |
511 ASSERT3U(dn->dn_assigned_txg, ==, 0); |
566 ASSERT(dn->dn_object != DMU_META_DNODE_OBJECT || dmu_tx_private_ok(tx)); |
569 ASSERT(dn->dn_object != DMU_META_DNODE_OBJECT || dmu_tx_private_ok(tx)); |
567 ASSERT(tx->tx_txg != 0); |
570 ASSERT(tx->tx_txg != 0); |
568 ASSERT((bonustype == DMU_OT_NONE && bonuslen == 0) || |
571 ASSERT((bonustype == DMU_OT_NONE && bonuslen == 0) || |
569 (bonustype != DMU_OT_NONE && bonuslen != 0) || |
572 (bonustype != DMU_OT_NONE && bonuslen != 0) || |
570 (bonustype == DMU_OT_SA && bonuslen == 0)); |
573 (bonustype == DMU_OT_SA && bonuslen == 0)); |
571 ASSERT3U(bonustype, <, DMU_OT_NUMTYPES); |
574 ASSERT(DMU_OT_IS_VALID(bonustype)); |
572 ASSERT3U(bonuslen, <=, DN_MAX_BONUSLEN); |
575 ASSERT3U(bonuslen, <=, DN_MAX_BONUSLEN); |
573 |
576 |
574 /* clean up any unreferenced dbufs */ |
577 /* clean up any unreferenced dbufs */ |
575 dnode_evict_dbufs(dn); |
578 dnode_evict_dbufs(dn); |
576 |
579 |