FreeBSD ZFS
The Zettabyte File System

Data Structures

Here are the data structures with brief descriptions:
acl_locator_cb
acl_ops
arc_buf
arc_buf_hdr
arc_callback
arc_state
arc_stats
arc_write_callback
arcs_lock
blkptrEach block is described by its DVAs, time of birth, checksum, etc
bplist
bplist_entry
bpobj
bpobj_phys
bptree_args
bptree_entry_phys
bptree_phys
buf_hash_table
cloneswaparg
dbuf_dirty_recordThe structure of dirty records (DR) mirror the dbufs they belong to
dbuf_hash_table
ddtIn-core ddt
ddt_bookmarkIn-core and on-disk bookmark for DDT walks
ddt_entryIn-core ddt entry
ddt_keyOn-disk ddt entry: key (name) and physical storage (value)
ddt_opsOps vector to access a specific DDT object type
ddt_phys
diffarg
dbuf_dirty_record::dirty_types::dirty_indirect
dbuf_dirty_record::dirty_types::dirty_leaf
dbuf_dirty_record::dirty_types
dmu_buf
dmu_buf_impl
dmu_diff_recordThe diff reports back ranges of free or in-use objects
dmu_object_byteswap_info
dmu_object_infoAll sizes are in bytes unless otherwise indicated
dmu_object_type_info
dmu_objset_stats
dmu_recv_cookieThis structure is opaque!
dmu_replay_record
dmu_sendarg
dmu_sync_arg_t
dmu_txNo synchronization is needed because a tx can only be handled by one thread
dmu_tx_callback
dmu_tx_hold
dmu_xuio
dnode
dnode_children
dnode_handleAdds a level of indirection between the dbuf and the dnode to avoid iterating descendent dbufs in dnode_move()
dnode_phys
drr_beginZfs ioctl command structure
drr_end
drr_free
drr_freeobjects
drr_objectBonus content follows drr-toguid
drr_spillSpill data follows drr_pad
drr_writeContent follows drr_key
drr_write_byref
dsl_dataset
dsl_dataset_phys
dsl_deadlist
dsl_deadlist_entry
dsl_deadlist_phys
dsl_dir
dsl_dir_phys
dsl_ds_destroyarg
dsl_ds_holdarg
dsl_ds_releasearg
dsl_pool
dsl_prop_cb_record
dsl_prop_set_arg
dsl_props_arg
dsl_scan
dsl_scan_phys
dsl_sync_task
dsl_sync_task_group
dvaAll SPA data is represented by 128-bit data virtual addresses (DVAs)
enqueue_clones_arg
findarg
free_range
fuid_domain
guid_map_entry
history_arg
ht_lock
inject_handler
itx
itx_async_nodeFor async nodes we build up an AVL tree of lists of async itxs per file
itxg
itxsIntent log transaction lists
killarg
l2arc_buf_hdr
l2arc_data_free
l2arc_dev
l2arc_read_callback
l2arc_write_callback
lr_acl_create_tLog record for creates with optional ACL This log record is also used for recording any FUID information needed for replaying the create
lr_acl_t
lr_acl_v0_t
lr_attr_tHandle option extended vattr attributes
lr_create_tLog record for creates without optional ACL
lr_link_t
lr_ooo_tCommon start of all out-of-order record types (TX_OOO() above)
lr_remove_t
lr_rename_t
lr_setattr_t
lr_tFormat of log records
lr_truncate_t
lr_write_t
lwbLog write buffer
mapargExtent mapping arg
metaslabEach metaslab's free space is tracked in space map object in the MOS, which is only updated in syncing context
metaslab_class
metaslab_group
mirror_child
mirror_map
mzap_ent
mzap_ent_phys
mzap_phys
objset
objset_phys
oscarg
perm_setRoutines for dsl_deleg_access() -- access checking
prefetch_data
process_old_arg
promotearg
promotenode
raidz_col
raidz_map
recvbeginsyncarg
recvendsyncarg
refcount
refsarg
renamearg
renamesnaparg
restorearg
rl
rrw_node
rrwlockA reader-writer lock implementation that allows re-entrant reads, but still gives writers priority on "new" reads
sa_attr_regAttribute to register support for
sa_attr_tableArray of known attributes and their various characteristics
sa_bulk_attrArray of attributes to store
sa_handleOpaque handle used for most sa functions
sa_hdr_physHeader for all bonus and spill buffers
sa_idx_tabIndex table of offsets
sa_lotEach unique layout will have their own table sa_lot (layout_table)
sa_osSince the offset/index information into the actual data will usually be identical we can share that information with all handles that have the exact same offsets
snaparg
spa
spa_aux
spa_aux_vdev
spa_config_dirent
spa_config_lock
spa_error_entry
spa_history_phys
spa_load_error
space_map
space_map_obj
space_map_ops
space_range_arg
space_ref
space_seg
tempreserve
traverse_data
trim_map
trim_seg
tx_cpu
tx_state
txg_handle
txg_list
txg_node
uberblockThe uberblock version is incremented whenever an incompatible on-disk format change is made to the SPA, DMU, or ZAP
ubl_cbdata
unique
vdc_stats
vdevVirtual device descriptor
vdev_cache
vdev_cache_entry
vdev_disk
vdev_disk_buf
vdev_file
vdev_label
vdev_ops
vdev_phys
vdev_probe_stats
vdev_queueA virtual device property
xuio_stats
zap
zap_attribute_t
zap_cursor
zap_entry_handle
zap_leaf
zap_leaf_chunk::zap_leaf_array
zap_leaf_chunk
zap_leaf_chunk::zap_leaf_entry
zap_leaf_chunk::zap_leaf_free
zap_leaf_phys::zap_leaf_header
zap_leaf_phys
zap_name
zap_physThis structure is followed by padding, and then the embedded pointer table
zap_stats
zap_phys::zap_table_phys
zbookmarkA bookmark is a four-tuple <objset, object, level, blkid> that uniquely identifies any block in the pool
zfs_ecksum_info::zei_ranges
zfetch
zfetch_stats
zfid_longFile IDs for snapshot filesystems
zfid_shortFile IDs for normal filesystems
zfs_aceStandard ACE
zfs_ace_hdrAll ACEs have a common hdr
zfs_aclA zfs_acl_t structure is composed of a list of zfs_acl_node_t's
zfs_acl_ids
zfs_acl_node
zfs_acl_phys
zfs_acl_phys_v0
zfs_all_blkstats
zfs_blkstat
zfs_cmd
zfs_creat
zfs_dbgmsg
zfs_dirlockDirectory Entry Locks
zfs_ecksum_info
zfs_fuidThe FUIDs in the log will index into domain string table and the bottom half will be the rid
zfs_fuid_domainList of unique domains
zfs_fuid_infoFUID information necessary for logging create, setattr, and setacl
zfs_hold_cleanup_arg
zfs_ioc_vec
zfs_object_aceThe following type only applies to ACE_ACCESS_ALLOWED|DENIED_OBJECT_ACE_TYPE and will only be set/retrieved in a CIFS context
zfs_oldace
zfs_onexit
zfs_onexit_action_node
zfs_share
zfs_snapentry_t
zfs_soft_state
zfs_statA limited number of zpl level stats are retrievable with an ioctl
zfs_useracct
zfs_zlock
zfsctl_node
zfsctl_snapdir
zfsvfs
zgd{zfs,zvol,ztest}_get_done() args
zil_bp_node
zil_chainLog block chaining
zil_headerIntent log header
zil_replay_arg
zil_scan_arg
zil_vdev_nodeVdev flushing: during a zil_commit(), we build up an AVL tree of the vdevs we've touched so we know which ones need a write cache flush at the end
zilogStable storage intent log management structure
zinject_record
zio
zio_bad_cksum
zio_checksum_infoInformation about each checksum function
zio_cksumEach block has a 256-bit checksum -- strong enough for cryptographic hashes
zio_cksum_report
zio_compress_infoInformation about each compression function
zio_eck
zio_gang_node
zio_gbh
zio_link
zio_prop
zio_taskq_info
zio_transform
zio_trim_stats
zio_vsd_ops
znode
znode_physThis is a deprecated data structure that only exists for dealing with file systems create prior to ZPL version 5
zrlock
zstream
zvol_extent
zvol_stateThe in-core state of each volume
 All Data Structures Files Functions Variables Typedefs Enumerations Enumerator Defines