usr/src/uts/common/fs/zfs/dnode.c
changeset 873 adefbfa5f42d
parent 789 b348f31ed315
child 1402 bfaffef2800c
equal deleted inserted replaced
872:3a2ac11314a8 873:adefbfa5f42d
   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); */