| FreeBSD ZFS The Zettabyte File System | 
#include <dnode.h>

| Data Fields | |
| krwlock_t | dn_struct_rwlock | 
| Protects the structure of the dnode, including the number of levels of indirection (dn_nlevels), dn_maxblkid, and dn_next_*. | |
| list_node_t | dn_link | 
| Our link on dn_objset->os_dnodes list; protected by os_lock. | |
| kmutex_t | dn_dbufs_mtx | 
| list_t | dn_dbufs | 
| descendent dbufs | |
| boolean_t | dn_have_spill | 
| have spill or are spilling | |
| struct zfetch | dn_zfetch | 
| holds prefetch structure | |
| Immutable | |
| struct objset * | dn_objset | 
| uint64_t | dn_object | 
| struct dmu_buf_impl * | dn_dbuf | 
| struct dnode_handle * | dn_handle | 
| dnode_phys_t * | dn_phys | 
| pointer into dn->dn_dbuf->db.db_data | |
| Copies of stuff in dn_phys | |
| They're valid in the open context (eg. even before the dnode is first synced). Where necessary, these are protected by dn_struct_rwlock. | |
| dmu_object_type_t | dn_type | 
| object type | |
| uint16_t | dn_bonuslen | 
| bonus length | |
| uint8_t | dn_bonustype | 
| bonus type | |
| uint8_t | dn_nblkptr | 
| number of blkptrs (immutable) | |
| uint8_t | dn_checksum | 
| ZIO_CHECKSUM type. | |
| uint8_t | dn_compress | 
| ZIO_COMPRESS type. | |
| uint8_t | dn_nlevels | 
| uint8_t | dn_indblkshift | 
| uint8_t | dn_datablkshift | 
| zero if blksz not power of 2! | |
| uint8_t | dn_moved | 
| Has this dnode been moved? | |
| uint16_t | dn_datablkszsec | 
| in 512b sectors | |
| uint32_t | dn_datablksz | 
| in bytes | |
| uint64_t | dn_maxblkid | 
| uint8_t | dn_next_nblkptr [TXG_SIZE] | 
| uint8_t | dn_next_nlevels [TXG_SIZE] | 
| uint8_t | dn_next_indblkshift [TXG_SIZE] | 
| uint8_t | dn_next_bonustype [TXG_SIZE] | 
| uint8_t | dn_rm_spillblk [TXG_SIZE] | 
| for removing spill blk | |
| uint16_t | dn_next_bonuslen [TXG_SIZE] | 
| uint32_t | dn_next_blksz [TXG_SIZE] | 
| next block size in bytes | |
| Protected by dn_dbufs_mtx | |
| declared here to fill 32-bit hole | |
| uint32_t | dn_dbufs_count | 
| count of dn_dbufs | |
| Protected by os_lock | |
| list_node_t | dn_dirty_link [TXG_SIZE] | 
| next on dataset's dirty | |
| Protected by dn_mtx | |
| kmutex_t | dn_mtx | 
| list_t | dn_dirty_records [TXG_SIZE] | 
| avl_tree_t | dn_ranges [TXG_SIZE] | 
| uint64_t | dn_allocated_txg | 
| uint64_t | dn_free_txg | 
| uint64_t | dn_assigned_txg | 
| kcondvar_t | dn_notxholds | 
| enum dnode_dirtycontext | dn_dirtyctx | 
| uint8_t * | dn_dirtyctx_firstset | 
| dbg: contents meaningless | |
| Protected by own devices | |
| refcount_t | dn_tx_holds | 
| refcount_t | dn_holds | 
| Protected by dn_struct_rwlock | |
| struct dmu_buf_impl * | dn_bonus | 
| bonus buffer dbuf | |
| Parent IO for current sync write | |
| zio_t * | dn_zio | 
| Used in syncing context | |
| uint64_t | dn_oldused | 
| old phys used bytes | |
| uint64_t | dn_oldflags | 
| old phys dn_flags | |
| uint64_t | dn_olduid | 
| uint64_t | dn_oldgid | 
| uint64_t | dn_newuid | 
| uint64_t | dn_newgid | 
| int | dn_id_flags | 
| uint64_t dnode::dn_allocated_txg | 
| uint64_t dnode::dn_assigned_txg | 
| struct dmu_buf_impl* dnode::dn_bonus | 
| uint16_t dnode::dn_bonuslen | 
| uint8_t dnode::dn_bonustype | 
| uint8_t dnode::dn_checksum | 
| uint8_t dnode::dn_compress | 
| uint8_t dnode::dn_datablkshift | 
| uint32_t dnode::dn_datablksz | 
| uint16_t dnode::dn_datablkszsec | 
| struct dmu_buf_impl* dnode::dn_dbuf | 
| list_t dnode::dn_dbufs | 
| uint32_t dnode::dn_dbufs_count | 
| kmutex_t dnode::dn_dbufs_mtx | 
| list_node_t dnode::dn_dirty_link[TXG_SIZE] | 
| list_t dnode::dn_dirty_records[TXG_SIZE] | 
| uint8_t* dnode::dn_dirtyctx_firstset | 
| uint64_t dnode::dn_free_txg | 
| struct dnode_handle* dnode::dn_handle | 
| boolean_t dnode::dn_have_spill | 
| uint8_t dnode::dn_indblkshift | 
| list_node_t dnode::dn_link | 
| uint64_t dnode::dn_maxblkid | 
| uint8_t dnode::dn_moved | 
| kmutex_t dnode::dn_mtx | 
| uint8_t dnode::dn_nblkptr | 
| uint64_t dnode::dn_newgid | 
| uint64_t dnode::dn_newuid | 
| uint32_t dnode::dn_next_blksz[TXG_SIZE] | 
| uint16_t dnode::dn_next_bonuslen[TXG_SIZE] | 
| uint8_t dnode::dn_next_bonustype[TXG_SIZE] | 
| uint8_t dnode::dn_next_indblkshift[TXG_SIZE] | 
| uint8_t dnode::dn_next_nblkptr[TXG_SIZE] | 
| uint8_t dnode::dn_next_nlevels[TXG_SIZE] | 
| uint8_t dnode::dn_nlevels | 
| kcondvar_t dnode::dn_notxholds | 
| uint64_t dnode::dn_object | 
| struct objset* dnode::dn_objset | 
| uint64_t dnode::dn_oldflags | 
| uint64_t dnode::dn_oldgid | 
| uint64_t dnode::dn_olduid | 
| uint64_t dnode::dn_oldused | 
| avl_tree_t dnode::dn_ranges[TXG_SIZE] | 
| uint8_t dnode::dn_rm_spillblk[TXG_SIZE] | 
| krwlock_t dnode::dn_struct_rwlock | 
| struct zfetch dnode::dn_zfetch | 
 1.7.3
 1.7.3