equal
deleted
inserted
replaced
111 { |
111 { |
112 kmem_cache_destroy(dnode_cache); |
112 kmem_cache_destroy(dnode_cache); |
113 } |
113 } |
114 |
114 |
115 |
115 |
|
116 #ifdef ZFS_DEBUG |
116 void |
117 void |
117 dnode_verify(dnode_t *dn) |
118 dnode_verify(dnode_t *dn) |
118 { |
119 { |
119 #ifdef ZFS_DEBUG |
|
120 int drop_struct_lock = FALSE; |
120 int drop_struct_lock = FALSE; |
121 |
121 |
122 ASSERT(dn->dn_phys); |
122 ASSERT(dn->dn_phys); |
123 ASSERT(dn->dn_objset); |
123 ASSERT(dn->dn_objset); |
124 |
124 |
162 (dnode_phys_t *)dn->dn_dbuf->db.db_data + |
162 (dnode_phys_t *)dn->dn_dbuf->db.db_data + |
163 (dn->dn_object % (dn->dn_dbuf->db.db_size >> DNODE_SHIFT))); |
163 (dn->dn_object % (dn->dn_dbuf->db.db_size >> DNODE_SHIFT))); |
164 } |
164 } |
165 if (drop_struct_lock) |
165 if (drop_struct_lock) |
166 rw_exit(&dn->dn_struct_rwlock); |
166 rw_exit(&dn->dn_struct_rwlock); |
|
167 } |
167 #endif |
168 #endif |
168 } |
|
169 |
169 |
170 void |
170 void |
171 dnode_byteswap(dnode_phys_t *dnp) |
171 dnode_byteswap(dnode_phys_t *dnp) |
172 { |
172 { |
173 uint64_t *buf64 = (void*)&dnp->dn_blkptr; |
173 uint64_t *buf64 = (void*)&dnp->dn_blkptr; |
457 |
457 |
458 dnode_t * |
458 dnode_t * |
459 dnode_special_open(objset_impl_t *os, dnode_phys_t *dnp, uint64_t object) |
459 dnode_special_open(objset_impl_t *os, dnode_phys_t *dnp, uint64_t object) |
460 { |
460 { |
461 dnode_t *dn = dnode_create(os, dnp, NULL, object); |
461 dnode_t *dn = dnode_create(os, dnp, NULL, object); |
462 dnode_verify(dn); |
462 DNODE_VERIFY(dn); |
463 return (dn); |
463 return (dn); |
464 } |
464 } |
465 |
465 |
466 static void |
466 static void |
467 dnode_buf_pageout(dmu_buf_t *db, void *arg) |
467 dnode_buf_pageout(dmu_buf_t *db, void *arg) |
513 if (object == 0 || object >= DN_MAX_OBJECT) |
513 if (object == 0 || object >= DN_MAX_OBJECT) |
514 return (NULL); |
514 return (NULL); |
515 |
515 |
516 mdn = os->os_meta_dnode; |
516 mdn = os->os_meta_dnode; |
517 |
517 |
518 dnode_verify(mdn); |
518 DNODE_VERIFY(mdn); |
519 |
519 |
520 if (!RW_WRITE_HELD(&mdn->dn_struct_rwlock)) { |
520 if (!RW_WRITE_HELD(&mdn->dn_struct_rwlock)) { |
521 rw_enter(&mdn->dn_struct_rwlock, RW_READER); |
521 rw_enter(&mdn->dn_struct_rwlock, RW_READER); |
522 drop_struct_lock = TRUE; |
522 drop_struct_lock = TRUE; |
523 } |
523 } |
568 mutex_exit(&dn->dn_mtx); |
568 mutex_exit(&dn->dn_mtx); |
569 |
569 |
570 if (refcount_add(&dn->dn_holds, ref) == 1) |
570 if (refcount_add(&dn->dn_holds, ref) == 1) |
571 dbuf_add_ref(db, dn); |
571 dbuf_add_ref(db, dn); |
572 |
572 |
573 dnode_verify(dn); |
573 DNODE_VERIFY(dn); |
574 ASSERT3P(dn->dn_dbuf, ==, db); |
574 ASSERT3P(dn->dn_dbuf, ==, db); |
575 ASSERT3U(dn->dn_object, ==, object); |
575 ASSERT3U(dn->dn_object, ==, object); |
576 dbuf_rele(db); |
576 dbuf_rele(db); |
577 |
577 |
578 return (dn); |
578 return (dn); |
612 uint64_t txg = tx->tx_txg; |
612 uint64_t txg = tx->tx_txg; |
613 |
613 |
614 if (IS_DNODE_DNODE(dn->dn_object)) |
614 if (IS_DNODE_DNODE(dn->dn_object)) |
615 return; |
615 return; |
616 |
616 |
617 dnode_verify(dn); |
617 DNODE_VERIFY(dn); |
618 |
618 |
619 #ifdef ZFS_DEBUG |
619 #ifdef ZFS_DEBUG |
620 mutex_enter(&dn->dn_mtx); |
620 mutex_enter(&dn->dn_mtx); |
621 ASSERT(dn->dn_phys->dn_type || dn->dn_allocated_txg); |
621 ASSERT(dn->dn_phys->dn_type || dn->dn_allocated_txg); |
622 /* ASSERT(dn->dn_free_txg == 0 || dn->dn_free_txg >= txg); */ |
622 /* ASSERT(dn->dn_free_txg == 0 || dn->dn_free_txg >= txg); */ |