btrfs/btrfs_tree_hc.go

491 lines
15 KiB
Go

package btrfs
// This code was auto-generated; DO NOT EDIT!
// This header contains the structure definitions and constants used
// by file system objects that can be retrieved using
// the BTRFS_IOC_SEARCH_TREE ioctl. That means basically anything that
// is needed to describe a leaf node's key or item contents.
const (
// Holds pointers to all of the tree roots
rootTreeObjectid = 1
// Stores information about which extents are in use, and reference counts
extentTreeObjectid = 2
// Chunk tree stores translations from logical -> physical block numbering
// the super block points to the chunk tree
chunkTreeObjectid = 3
// Stores information about which areas of a given device are in use.
// one per device. The tree of tree roots points to the device tree
devTreeObjectid = 4
// One per subvolume, storing files and directories
fsTreeObjectid = 5
// Directory objectid inside the root tree
rootTreeDirObjectid = 6
// Holds checksums of all the data extents
csumTreeObjectid = 7
// Holds quota configuration and tracking
quotaTreeObjectid = 8
// For storing items that use the BTRFS_UUID_KEY* types
uuidTreeObjectid = 9
// Tracks free space in block groups.
freeSpaceTreeObjectid = 10
// Device stats in the device tree
devStatsObjectid = 0
// For storing balance parameters in the root tree
balanceObjectid = (1<<64 - 4)
// Orhpan objectid for tracking unlinked/truncated files
orphanObjectid = (1<<64 - 5)
// Does write ahead logging to speed up fsyncs
treeLogObjectid = (1<<64 - 6)
treeLogFixupObjectid = (1<<64 - 7)
// For space balancing
treeRelocObjectid = (1<<64 - 8)
dataRelocTreeObjectid = (1<<64 - 9)
// Extent checksums all have this objectid
// this allows them to share the logging tree
// for fsyncs
extentCsumObjectid = (1<<64 - 10)
// For storing free space cache
freeSpaceObjectid = (1<<64 - 11)
// The inode number assigned to the special inode for storing
// free ino cache
freeInoObjectid = (1<<64 - 12)
// Dummy objectid represents multiple objectids
multipleObjectids = (1<<64 - 255)
// All files have objectids in this range.
firstFreeObjectid = 256
lastFreeObjectid = (1<<64 - 256)
firstChunkTreeObjectid = 256
// The device items go into the chunk tree. The key is in the form
// [ 1 BTRFS_DEV_ITEM_KEY device_id ]
devItemsObjectid = 1
btreeInodeObjectid = 1
emptySubvolDirObjectid = 2
devReplaceDevid = 0
// Inode items have the data typically returned from stat and store other
// info about object characteristics. There is one for every file and dir in
// the FS
inodeItemKey = 1
inodeRefKey = 12
inodeExtrefKey = 13
xattrItemKey = 24
orphanItemKey = 48
// Reserve 2-15 close to the inode for later flexibility
// Dir items are the name -> inode pointers in a directory. There is one
// for every name in a directory.
dirLogItemKey = 60
dirLogIndexKey = 72
dirItemKey = 84
dirIndexKey = 96
// Extent data is for file data
extentDataKey = 108
// Extent csums are stored in a separate tree and hold csums for
// an entire extent on disk.
extentCsumKey = 128
// Root items point to tree roots. They are typically in the root
// tree used by the super block to find all the other trees
rootItemKey = 132
// Root backrefs tie subvols and snapshots to the directory entries that
// reference them
rootBackrefKey = 144
// Root refs make a fast index for listing all of the snapshots and
// subvolumes referenced by a given root. They point directly to the
// directory item in the root that references the subvol
rootRefKey = 156
// Extent items are in the extent map tree. These record which blocks
// are used, and how many references there are to each block
extentItemKey = 168
// The same as the BTRFS_EXTENT_ITEM_KEY, except it's metadata we already know
// the length, so we save the level in key->offset instead of the length.
metadataItemKey = 169
treeBlockRefKey = 176
extentDataRefKey = 178
extentRefV0Key = 180
sharedBlockRefKey = 182
sharedDataRefKey = 184
// Block groups give us hints into the extent allocation trees. Which
// blocks are free etc etc
blockGroupItemKey = 192
// Every block group is represented in the free space tree by a free space info
// item, which stores some accounting information. It is keyed on
// (block_group_start, FREE_SPACE_INFO, block_group_length).
freeSpaceInfoKey = 198
// A free space extent tracks an extent of space that is free in a block group.
// It is keyed on (start, FREE_SPACE_EXTENT, length).
freeSpaceExtentKey = 199
// When a block group becomes very fragmented, we convert it to use bitmaps
// instead of extents. A free space bitmap is keyed on
// (start, FREE_SPACE_BITMAP, length); the corresponding item is a bitmap with
// (length / sectorsize) bits.
freeSpaceBitmapKey = 200
devExtentKey = 204
devItemKey = 216
chunkItemKey = 228
// Records the overall state of the qgroups.
// There's only one instance of this key present,
// (0, BTRFS_QGROUP_STATUS_KEY, 0)
qgroupStatusKey = 240
// Records the currently used space of the qgroup.
// One key per qgroup, (0, BTRFS_QGROUP_INFO_KEY, qgroupid).
qgroupInfoKey = 242
// Contains the user configured limits for the qgroup.
// One key per qgroup, (0, BTRFS_QGROUP_LIMIT_KEY, qgroupid).
qgroupLimitKey = 244
// Records the child-parent relationship of qgroups. For
// each relation, 2 keys are present:
// (childid, BTRFS_QGROUP_RELATION_KEY, parentid)
// (parentid, BTRFS_QGROUP_RELATION_KEY, childid)
qgroupRelationKey = 246
// Obsolete name, see BTRFS_TEMPORARY_ITEM_KEY.
balanceItemKey = 248
// The key type for tree items that are stored persistently, but do not need to
// exist for extended period of time. The items can exist in any tree.
// [subtype, BTRFS_TEMPORARY_ITEM_KEY, data]
// Existing items:
// - balance status item
// (BTRFS_BALANCE_OBJECTID, BTRFS_TEMPORARY_ITEM_KEY, 0)
temporaryItemKey = 248
// Obsolete name, see BTRFS_PERSISTENT_ITEM_KEY
devStatsKey = 249
// The key type for tree items that are stored persistently and usually exist
// for a long period, eg. filesystem lifetime. The item kinds can be status
// information, stats or preference values. The item can exist in any tree.
// [subtype, BTRFS_PERSISTENT_ITEM_KEY, data]
// Existing items:
// - device statistics, store IO stats in the device tree, one key for all
// stats
// (BTRFS_DEV_STATS_OBJECTID, BTRFS_DEV_STATS_KEY, 0)
persistentItemKey = 249
// Persistantly stores the device replace state in the device tree.
// The key is built like this: (0, BTRFS_DEV_REPLACE_KEY, 0).
devReplaceKey = 250
// Stores items that allow to quickly map UUIDs to something else.
// These items are part of the filesystem UUID tree.
// The key is built like this:
// (UUID_upper_64_bits, BTRFS_UUID_KEY*, UUID_lower_64_bits).
uuidKeySubvol = 251
uuidKeyReceivedSubvol = 252
// String items are for debugging. They just store a short string of
// data in the FS
stringItemKey = 253
// 32 bytes in various csum fields
csumSize = 32
// Csum types
csumTypeCrc32 = 0
// Flags definitions for directory entry item type
// Used by:
// struct btrfs_dir_item.type
ftUnknown = 0
ftRegFile = 1
ftDir = 2
ftChrdev = 3
ftBlkdev = 4
ftFifo = 5
ftSock = 6
ftSymlink = 7
ftXattr = 8
ftMax = 9
// The key defines the order in the tree, and so it also defines (optimal)
// block layout.
// objectid corresponds to the inode number.
// type tells us things about the object, and is a kind of stream selector.
// so for a given inode, keys with type of 1 might refer to the inode data,
// type of 2 may point to file data in the btree and type == 3 may point to
// extents.
// offset is the starting byte offset for this key in the stream.
// btrfs_disk_key is in disk byte order. struct btrfs_key is always
// in cpu native order. Otherwise they are identical and their sizes
// should be the same (ie both packed)
// The internal btrfs device id
// Size of the device
// Bytes used
// Optimal io alignment for this device
// Optimal io width for this device
// Minimal io size for this device
// Type and info about this device
// Expected generation for this device
// Starting byte of this partition on the device,
// to allow for stripe alignment in the future
// Grouping information for allocation decisions
// Seek speed 0-100 where 100 is fastest
// Bandwidth 0-100 where 100 is fastest
// Btrfs generated uuid for this device
// Uuid of FS who owns this device
// Size of this chunk in bytes
// Objectid of the root referencing this chunk
// Optimal io alignment for this chunk
// Optimal io width for this chunk
// Minimal io size for this chunk
// 2^16 stripes is quite a lot, a second limit is the size of a single
// item in the btree
// Sub stripes only matter for raid10
// Additional stripes go here
freeSpaceExtent = 1
freeSpaceBitmap = 2
headerFlagWritten = (1 << 0)
headerFlagReloc = (1 << 1)
// Super block flags
// Errors detected
superFlagError = (1 << 2)
superFlagSeeding = (1 << 32)
superFlagMetadump = (1 << 33)
// Items in the extent btree are used to record the objectid of the
// owner of the block and the number of references
extentFlagData = (1 << 0)
extentFlagTreeBlock = (1 << 1)
// Following flags only apply to tree blocks
// Use full backrefs for extent pointers in the block
blockFlagFullBackref = (1 << 8)
// This flag is only used internally by scrub and may be changed at any time
// it is only declared here to avoid collisions
extentFlagSuper = (1 << 48)
// Old style backrefs item
// Dev extents record free space on individual devices. The owner
// field points back to the chunk allocation mapping tree that allocated
// the extent. The chunk tree uuid field is a way to double check the owner
// Name goes here
// Name goes here
// Nfs style generation number
// Transid that last touched this inode
// Modification sequence number for NFS
// A little future expansion, for more than this we can
// just grow the inode item and version it
rootSubvolRdonly = (1 << 0)
// Internal in-memory flag that a subvolume has been marked for deletion but
// still visible as a directory
rootSubvolDead = (1 << 48)
// The following fields appear after subvol_uuids+subvol_times
// were introduced.
// This generation number is used to test if the new fields are valid
// and up to date while reading the root item. Every time the root item
// is written out, the "generation" field is copied into this field. If
// anyone ever mounted the fs with an older kernel, we will have
// mismatching generation values here and thus must invalidate the
// new fields. See btrfs_update_root and btrfs_find_last_root for
// details.
// the offset of generation_v2 is also used as the start for the memset
// when invalidating the fields.
// This is used for both forward and backward root refs
// Profiles to operate on, single is denoted by
// BTRFS_AVAIL_ALLOC_BIT_SINGLE
// Usage filter
// BTRFS_BALANCE_ARGS_USAGE with a single value means '0..N'
// BTRFS_BALANCE_ARGS_USAGE_RANGE - range syntax, min..max
// Devid filter
// Devid subset filter [pstart..pend)
// Btrfs virtual address space subset filter [vstart..vend)
// Profile to convert to, single is denoted by
// BTRFS_AVAIL_ALLOC_BIT_SINGLE
// BTRFS_BALANCE_ARGS_*
// BTRFS_BALANCE_ARGS_LIMIT with value 'limit'
// BTRFS_BALANCE_ARGS_LIMIT_RANGE - the extend version can use minimum
// and maximum
// Process chunks that cross stripes_min..stripes_max devices,
// BTRFS_BALANCE_ARGS_STRIPES_RANGE
// Store balance parameters to disk so that balance can be properly
// resumed after crash or unmount
// BTRFS_BALANCE_*
fileExtentInline = 0
fileExtentReg = 1
fileExtentPrealloc = 2
// Transaction id that created this extent
// Max number of bytes to hold this extent in ram
// when we split a compressed extent we can't know how big
// each of the resulting pieces will be. So, this is
// an upper limit on the size of the extent in ram instead of
// an exact limit.
// 32 bits for the various ways we might encode the data,
// including compression and encryption. If any of these
// are set to something a given disk format doesn't understand
// it is treated like an incompat flag for reading and writing,
// but not for stat.
// Are we inline data or a real extent?
// Disk space consumed by the extent, checksum blocks are included
// in these numbers
// At this offset in the structure, the inline extent data start.
// The logical offset in file blocks (no csums)
// this extent record is for. This allows a file extent to point
// into the middle of an existing extent on disk, sharing it
// between two snapshots (useful if some bytes in the middle of the
// extent have changed
// The logical number of file blocks (no csums included). This
// always reflects the size uncompressed and without encoding.
// Grow this item struct at the end for future enhancements and keep
// the existing values unchanged
devReplaceItemContReadingFromSrcdevModeAlways = 0
devReplaceItemContReadingFromSrcdevModeAvoid = 1
devReplaceItemStateNeverStarted = 0
devReplaceItemStateStarted = 1
devReplaceItemStateSuspended = 2
devReplaceItemStateFinished = 3
devReplaceItemStateCanceled = 4
// Grow this item struct at the end for future enhancements and keep
// the existing values unchanged
// Different types of block groups (and chunks)
blockGroupData = (1 << 0)
blockGroupSystem = (1 << 1)
blockGroupMetadata = (1 << 2)
blockGroupRaid0 = (1 << 3)
blockGroupRaid1 = (1 << 4)
blockGroupDup = (1 << 5)
blockGroupRaid10 = (1 << 6)
blockGroupRaid5 = (1 << 7)
blockGroupRaid6 = (1 << 8)
// We need a bit for restriper to be able to tell when chunks of type
// SINGLE are available. This "extended" profile format is used in
// fs_info->avail_*_alloc_bits (in-memory) and balance item fields
// (on-disk). The corresponding on-disk bit in chunk.type is reserved
// to avoid remappings between two formats in future.
availAllocBitSingle = (1 << 48)
// A fake block group type that is used to communicate global block reserve
// size to userspace via the SPACE_INFO ioctl.
spaceInfoGlobalRsv = (1 << 49)
freeSpaceUsingBitmaps = (1 << 0)
qgroupLevelShift = 48
// Is subvolume quota turned on?
qgroupStatusFlagOn = (1 << 0)
// RESCAN is set during the initialization phase
qgroupStatusFlagRescan = (1 << 1)
// Some qgroup entries are known to be out of date,
// either because the configuration has changed in a way that
// makes a rescan necessary, or because the fs has been mounted
// with a non-qgroup-aware version.
// Turning qouta off and on again makes it inconsistent, too.
qgroupStatusFlagInconsistent = (1 << 2)
qgroupStatusVersion = 1
// The generation is updated during every commit. As older
// versions of btrfs are not aware of qgroups, it will be
// possible to detect inconsistencies by checking the
// generation on mount time
// Flag definitions see above
// Only used during scanning to record the progress
// of the scan. It contains a logical address
// Only updated when any of the other values change
)