Home | History | Annotate | Download | only in linux
      1 /* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */
      2 #ifndef _BTRFS_CTREE_H_
      3 #define _BTRFS_CTREE_H_
      4 
      5 #include <linux/btrfs.h>
      6 #include <linux/types.h>
      7 
      8 /*
      9  * This header contains the structure definitions and constants used
     10  * by file system objects that can be retrieved using
     11  * the BTRFS_IOC_SEARCH_TREE ioctl.  That means basically anything that
     12  * is needed to describe a leaf node's key or item contents.
     13  */
     14 
     15 /* holds pointers to all of the tree roots */
     16 #define BTRFS_ROOT_TREE_OBJECTID 1ULL
     17 
     18 /* stores information about which extents are in use, and reference counts */
     19 #define BTRFS_EXTENT_TREE_OBJECTID 2ULL
     20 
     21 /*
     22  * chunk tree stores translations from logical -> physical block numbering
     23  * the super block points to the chunk tree
     24  */
     25 #define BTRFS_CHUNK_TREE_OBJECTID 3ULL
     26 
     27 /*
     28  * stores information about which areas of a given device are in use.
     29  * one per device.  The tree of tree roots points to the device tree
     30  */
     31 #define BTRFS_DEV_TREE_OBJECTID 4ULL
     32 
     33 /* one per subvolume, storing files and directories */
     34 #define BTRFS_FS_TREE_OBJECTID 5ULL
     35 
     36 /* directory objectid inside the root tree */
     37 #define BTRFS_ROOT_TREE_DIR_OBJECTID 6ULL
     38 
     39 /* holds checksums of all the data extents */
     40 #define BTRFS_CSUM_TREE_OBJECTID 7ULL
     41 
     42 /* holds quota configuration and tracking */
     43 #define BTRFS_QUOTA_TREE_OBJECTID 8ULL
     44 
     45 /* for storing items that use the BTRFS_UUID_KEY* types */
     46 #define BTRFS_UUID_TREE_OBJECTID 9ULL
     47 
     48 /* tracks free space in block groups. */
     49 #define BTRFS_FREE_SPACE_TREE_OBJECTID 10ULL
     50 
     51 /* device stats in the device tree */
     52 #define BTRFS_DEV_STATS_OBJECTID 0ULL
     53 
     54 /* for storing balance parameters in the root tree */
     55 #define BTRFS_BALANCE_OBJECTID -4ULL
     56 
     57 /* orhpan objectid for tracking unlinked/truncated files */
     58 #define BTRFS_ORPHAN_OBJECTID -5ULL
     59 
     60 /* does write ahead logging to speed up fsyncs */
     61 #define BTRFS_TREE_LOG_OBJECTID -6ULL
     62 #define BTRFS_TREE_LOG_FIXUP_OBJECTID -7ULL
     63 
     64 /* for space balancing */
     65 #define BTRFS_TREE_RELOC_OBJECTID -8ULL
     66 #define BTRFS_DATA_RELOC_TREE_OBJECTID -9ULL
     67 
     68 /*
     69  * extent checksums all have this objectid
     70  * this allows them to share the logging tree
     71  * for fsyncs
     72  */
     73 #define BTRFS_EXTENT_CSUM_OBJECTID -10ULL
     74 
     75 /* For storing free space cache */
     76 #define BTRFS_FREE_SPACE_OBJECTID -11ULL
     77 
     78 /*
     79  * The inode number assigned to the special inode for storing
     80  * free ino cache
     81  */
     82 #define BTRFS_FREE_INO_OBJECTID -12ULL
     83 
     84 /* dummy objectid represents multiple objectids */
     85 #define BTRFS_MULTIPLE_OBJECTIDS -255ULL
     86 
     87 /*
     88  * All files have objectids in this range.
     89  */
     90 #define BTRFS_FIRST_FREE_OBJECTID 256ULL
     91 #define BTRFS_LAST_FREE_OBJECTID -256ULL
     92 #define BTRFS_FIRST_CHUNK_TREE_OBJECTID 256ULL
     93 
     94 
     95 /*
     96  * the device items go into the chunk tree.  The key is in the form
     97  * [ 1 BTRFS_DEV_ITEM_KEY device_id ]
     98  */
     99 #define BTRFS_DEV_ITEMS_OBJECTID 1ULL
    100 
    101 #define BTRFS_BTREE_INODE_OBJECTID 1
    102 
    103 #define BTRFS_EMPTY_SUBVOL_DIR_OBJECTID 2
    104 
    105 #define BTRFS_DEV_REPLACE_DEVID 0ULL
    106 
    107 /*
    108  * inode items have the data typically returned from stat and store other
    109  * info about object characteristics.  There is one for every file and dir in
    110  * the FS
    111  */
    112 #define BTRFS_INODE_ITEM_KEY		1
    113 #define BTRFS_INODE_REF_KEY		12
    114 #define BTRFS_INODE_EXTREF_KEY		13
    115 #define BTRFS_XATTR_ITEM_KEY		24
    116 #define BTRFS_ORPHAN_ITEM_KEY		48
    117 /* reserve 2-15 close to the inode for later flexibility */
    118 
    119 /*
    120  * dir items are the name -> inode pointers in a directory.  There is one
    121  * for every name in a directory.
    122  */
    123 #define BTRFS_DIR_LOG_ITEM_KEY  60
    124 #define BTRFS_DIR_LOG_INDEX_KEY 72
    125 #define BTRFS_DIR_ITEM_KEY	84
    126 #define BTRFS_DIR_INDEX_KEY	96
    127 /*
    128  * extent data is for file data
    129  */
    130 #define BTRFS_EXTENT_DATA_KEY	108
    131 
    132 /*
    133  * extent csums are stored in a separate tree and hold csums for
    134  * an entire extent on disk.
    135  */
    136 #define BTRFS_EXTENT_CSUM_KEY	128
    137 
    138 /*
    139  * root items point to tree roots.  They are typically in the root
    140  * tree used by the super block to find all the other trees
    141  */
    142 #define BTRFS_ROOT_ITEM_KEY	132
    143 
    144 /*
    145  * root backrefs tie subvols and snapshots to the directory entries that
    146  * reference them
    147  */
    148 #define BTRFS_ROOT_BACKREF_KEY	144
    149 
    150 /*
    151  * root refs make a fast index for listing all of the snapshots and
    152  * subvolumes referenced by a given root.  They point directly to the
    153  * directory item in the root that references the subvol
    154  */
    155 #define BTRFS_ROOT_REF_KEY	156
    156 
    157 /*
    158  * extent items are in the extent map tree.  These record which blocks
    159  * are used, and how many references there are to each block
    160  */
    161 #define BTRFS_EXTENT_ITEM_KEY	168
    162 
    163 /*
    164  * The same as the BTRFS_EXTENT_ITEM_KEY, except it's metadata we already know
    165  * the length, so we save the level in key->offset instead of the length.
    166  */
    167 #define BTRFS_METADATA_ITEM_KEY	169
    168 
    169 #define BTRFS_TREE_BLOCK_REF_KEY	176
    170 
    171 #define BTRFS_EXTENT_DATA_REF_KEY	178
    172 
    173 #define BTRFS_EXTENT_REF_V0_KEY		180
    174 
    175 #define BTRFS_SHARED_BLOCK_REF_KEY	182
    176 
    177 #define BTRFS_SHARED_DATA_REF_KEY	184
    178 
    179 /*
    180  * block groups give us hints into the extent allocation trees.  Which
    181  * blocks are free etc etc
    182  */
    183 #define BTRFS_BLOCK_GROUP_ITEM_KEY 192
    184 
    185 /*
    186  * Every block group is represented in the free space tree by a free space info
    187  * item, which stores some accounting information. It is keyed on
    188  * (block_group_start, FREE_SPACE_INFO, block_group_length).
    189  */
    190 #define BTRFS_FREE_SPACE_INFO_KEY 198
    191 
    192 /*
    193  * A free space extent tracks an extent of space that is free in a block group.
    194  * It is keyed on (start, FREE_SPACE_EXTENT, length).
    195  */
    196 #define BTRFS_FREE_SPACE_EXTENT_KEY 199
    197 
    198 /*
    199  * When a block group becomes very fragmented, we convert it to use bitmaps
    200  * instead of extents. A free space bitmap is keyed on
    201  * (start, FREE_SPACE_BITMAP, length); the corresponding item is a bitmap with
    202  * (length / sectorsize) bits.
    203  */
    204 #define BTRFS_FREE_SPACE_BITMAP_KEY 200
    205 
    206 #define BTRFS_DEV_EXTENT_KEY	204
    207 #define BTRFS_DEV_ITEM_KEY	216
    208 #define BTRFS_CHUNK_ITEM_KEY	228
    209 
    210 /*
    211  * Records the overall state of the qgroups.
    212  * There's only one instance of this key present,
    213  * (0, BTRFS_QGROUP_STATUS_KEY, 0)
    214  */
    215 #define BTRFS_QGROUP_STATUS_KEY         240
    216 /*
    217  * Records the currently used space of the qgroup.
    218  * One key per qgroup, (0, BTRFS_QGROUP_INFO_KEY, qgroupid).
    219  */
    220 #define BTRFS_QGROUP_INFO_KEY           242
    221 /*
    222  * Contains the user configured limits for the qgroup.
    223  * One key per qgroup, (0, BTRFS_QGROUP_LIMIT_KEY, qgroupid).
    224  */
    225 #define BTRFS_QGROUP_LIMIT_KEY          244
    226 /*
    227  * Records the child-parent relationship of qgroups. For
    228  * each relation, 2 keys are present:
    229  * (childid, BTRFS_QGROUP_RELATION_KEY, parentid)
    230  * (parentid, BTRFS_QGROUP_RELATION_KEY, childid)
    231  */
    232 #define BTRFS_QGROUP_RELATION_KEY       246
    233 
    234 /*
    235  * Obsolete name, see BTRFS_TEMPORARY_ITEM_KEY.
    236  */
    237 #define BTRFS_BALANCE_ITEM_KEY	248
    238 
    239 /*
    240  * The key type for tree items that are stored persistently, but do not need to
    241  * exist for extended period of time. The items can exist in any tree.
    242  *
    243  * [subtype, BTRFS_TEMPORARY_ITEM_KEY, data]
    244  *
    245  * Existing items:
    246  *
    247  * - balance status item
    248  *   (BTRFS_BALANCE_OBJECTID, BTRFS_TEMPORARY_ITEM_KEY, 0)
    249  */
    250 #define BTRFS_TEMPORARY_ITEM_KEY	248
    251 
    252 /*
    253  * Obsolete name, see BTRFS_PERSISTENT_ITEM_KEY
    254  */
    255 #define BTRFS_DEV_STATS_KEY		249
    256 
    257 /*
    258  * The key type for tree items that are stored persistently and usually exist
    259  * for a long period, eg. filesystem lifetime. The item kinds can be status
    260  * information, stats or preference values. The item can exist in any tree.
    261  *
    262  * [subtype, BTRFS_PERSISTENT_ITEM_KEY, data]
    263  *
    264  * Existing items:
    265  *
    266  * - device statistics, store IO stats in the device tree, one key for all
    267  *   stats
    268  *   (BTRFS_DEV_STATS_OBJECTID, BTRFS_DEV_STATS_KEY, 0)
    269  */
    270 #define BTRFS_PERSISTENT_ITEM_KEY	249
    271 
    272 /*
    273  * Persistantly stores the device replace state in the device tree.
    274  * The key is built like this: (0, BTRFS_DEV_REPLACE_KEY, 0).
    275  */
    276 #define BTRFS_DEV_REPLACE_KEY	250
    277 
    278 /*
    279  * Stores items that allow to quickly map UUIDs to something else.
    280  * These items are part of the filesystem UUID tree.
    281  * The key is built like this:
    282  * (UUID_upper_64_bits, BTRFS_UUID_KEY*, UUID_lower_64_bits).
    283  */
    284 #if BTRFS_UUID_SIZE != 16
    285 #error "UUID items require BTRFS_UUID_SIZE == 16!"
    286 #endif
    287 #define BTRFS_UUID_KEY_SUBVOL	251	/* for UUIDs assigned to subvols */
    288 #define BTRFS_UUID_KEY_RECEIVED_SUBVOL	252	/* for UUIDs assigned to
    289 						 * received subvols */
    290 
    291 /*
    292  * string items are for debugging.  They just store a short string of
    293  * data in the FS
    294  */
    295 #define BTRFS_STRING_ITEM_KEY	253
    296 
    297 
    298 
    299 /* 32 bytes in various csum fields */
    300 #define BTRFS_CSUM_SIZE 32
    301 
    302 /* csum types */
    303 #define BTRFS_CSUM_TYPE_CRC32	0
    304 
    305 /*
    306  * flags definitions for directory entry item type
    307  *
    308  * Used by:
    309  * struct btrfs_dir_item.type
    310  */
    311 #define BTRFS_FT_UNKNOWN	0
    312 #define BTRFS_FT_REG_FILE	1
    313 #define BTRFS_FT_DIR		2
    314 #define BTRFS_FT_CHRDEV		3
    315 #define BTRFS_FT_BLKDEV		4
    316 #define BTRFS_FT_FIFO		5
    317 #define BTRFS_FT_SOCK		6
    318 #define BTRFS_FT_SYMLINK	7
    319 #define BTRFS_FT_XATTR		8
    320 #define BTRFS_FT_MAX		9
    321 
    322 /*
    323  * The key defines the order in the tree, and so it also defines (optimal)
    324  * block layout.
    325  *
    326  * objectid corresponds to the inode number.
    327  *
    328  * type tells us things about the object, and is a kind of stream selector.
    329  * so for a given inode, keys with type of 1 might refer to the inode data,
    330  * type of 2 may point to file data in the btree and type == 3 may point to
    331  * extents.
    332  *
    333  * offset is the starting byte offset for this key in the stream.
    334  *
    335  * btrfs_disk_key is in disk byte order.  struct btrfs_key is always
    336  * in cpu native order.  Otherwise they are identical and their sizes
    337  * should be the same (ie both packed)
    338  */
    339 struct btrfs_disk_key {
    340 	__le64 objectid;
    341 	__u8 type;
    342 	__le64 offset;
    343 } __attribute__ ((__packed__));
    344 
    345 struct btrfs_key {
    346 	__u64 objectid;
    347 	__u8 type;
    348 	__u64 offset;
    349 } __attribute__ ((__packed__));
    350 
    351 struct btrfs_dev_item {
    352 	/* the internal btrfs device id */
    353 	__le64 devid;
    354 
    355 	/* size of the device */
    356 	__le64 total_bytes;
    357 
    358 	/* bytes used */
    359 	__le64 bytes_used;
    360 
    361 	/* optimal io alignment for this device */
    362 	__le32 io_align;
    363 
    364 	/* optimal io width for this device */
    365 	__le32 io_width;
    366 
    367 	/* minimal io size for this device */
    368 	__le32 sector_size;
    369 
    370 	/* type and info about this device */
    371 	__le64 type;
    372 
    373 	/* expected generation for this device */
    374 	__le64 generation;
    375 
    376 	/*
    377 	 * starting byte of this partition on the device,
    378 	 * to allow for stripe alignment in the future
    379 	 */
    380 	__le64 start_offset;
    381 
    382 	/* grouping information for allocation decisions */
    383 	__le32 dev_group;
    384 
    385 	/* seek speed 0-100 where 100 is fastest */
    386 	__u8 seek_speed;
    387 
    388 	/* bandwidth 0-100 where 100 is fastest */
    389 	__u8 bandwidth;
    390 
    391 	/* btrfs generated uuid for this device */
    392 	__u8 uuid[BTRFS_UUID_SIZE];
    393 
    394 	/* uuid of FS who owns this device */
    395 	__u8 fsid[BTRFS_UUID_SIZE];
    396 } __attribute__ ((__packed__));
    397 
    398 struct btrfs_stripe {
    399 	__le64 devid;
    400 	__le64 offset;
    401 	__u8 dev_uuid[BTRFS_UUID_SIZE];
    402 } __attribute__ ((__packed__));
    403 
    404 struct btrfs_chunk {
    405 	/* size of this chunk in bytes */
    406 	__le64 length;
    407 
    408 	/* objectid of the root referencing this chunk */
    409 	__le64 owner;
    410 
    411 	__le64 stripe_len;
    412 	__le64 type;
    413 
    414 	/* optimal io alignment for this chunk */
    415 	__le32 io_align;
    416 
    417 	/* optimal io width for this chunk */
    418 	__le32 io_width;
    419 
    420 	/* minimal io size for this chunk */
    421 	__le32 sector_size;
    422 
    423 	/* 2^16 stripes is quite a lot, a second limit is the size of a single
    424 	 * item in the btree
    425 	 */
    426 	__le16 num_stripes;
    427 
    428 	/* sub stripes only matter for raid10 */
    429 	__le16 sub_stripes;
    430 	struct btrfs_stripe stripe;
    431 	/* additional stripes go here */
    432 } __attribute__ ((__packed__));
    433 
    434 #define BTRFS_FREE_SPACE_EXTENT	1
    435 #define BTRFS_FREE_SPACE_BITMAP	2
    436 
    437 struct btrfs_free_space_entry {
    438 	__le64 offset;
    439 	__le64 bytes;
    440 	__u8 type;
    441 } __attribute__ ((__packed__));
    442 
    443 struct btrfs_free_space_header {
    444 	struct btrfs_disk_key location;
    445 	__le64 generation;
    446 	__le64 num_entries;
    447 	__le64 num_bitmaps;
    448 } __attribute__ ((__packed__));
    449 
    450 #define BTRFS_HEADER_FLAG_WRITTEN	(1ULL << 0)
    451 #define BTRFS_HEADER_FLAG_RELOC		(1ULL << 1)
    452 
    453 /* Super block flags */
    454 /* Errors detected */
    455 #define BTRFS_SUPER_FLAG_ERROR		(1ULL << 2)
    456 
    457 #define BTRFS_SUPER_FLAG_SEEDING	(1ULL << 32)
    458 #define BTRFS_SUPER_FLAG_METADUMP	(1ULL << 33)
    459 
    460 
    461 /*
    462  * items in the extent btree are used to record the objectid of the
    463  * owner of the block and the number of references
    464  */
    465 
    466 struct btrfs_extent_item {
    467 	__le64 refs;
    468 	__le64 generation;
    469 	__le64 flags;
    470 } __attribute__ ((__packed__));
    471 
    472 struct btrfs_extent_item_v0 {
    473 	__le32 refs;
    474 } __attribute__ ((__packed__));
    475 
    476 
    477 #define BTRFS_EXTENT_FLAG_DATA		(1ULL << 0)
    478 #define BTRFS_EXTENT_FLAG_TREE_BLOCK	(1ULL << 1)
    479 
    480 /* following flags only apply to tree blocks */
    481 
    482 /* use full backrefs for extent pointers in the block */
    483 #define BTRFS_BLOCK_FLAG_FULL_BACKREF	(1ULL << 8)
    484 
    485 /*
    486  * this flag is only used internally by scrub and may be changed at any time
    487  * it is only declared here to avoid collisions
    488  */
    489 #define BTRFS_EXTENT_FLAG_SUPER		(1ULL << 48)
    490 
    491 struct btrfs_tree_block_info {
    492 	struct btrfs_disk_key key;
    493 	__u8 level;
    494 } __attribute__ ((__packed__));
    495 
    496 struct btrfs_extent_data_ref {
    497 	__le64 root;
    498 	__le64 objectid;
    499 	__le64 offset;
    500 	__le32 count;
    501 } __attribute__ ((__packed__));
    502 
    503 struct btrfs_shared_data_ref {
    504 	__le32 count;
    505 } __attribute__ ((__packed__));
    506 
    507 struct btrfs_extent_inline_ref {
    508 	__u8 type;
    509 	__le64 offset;
    510 } __attribute__ ((__packed__));
    511 
    512 /* old style backrefs item */
    513 struct btrfs_extent_ref_v0 {
    514 	__le64 root;
    515 	__le64 generation;
    516 	__le64 objectid;
    517 	__le32 count;
    518 } __attribute__ ((__packed__));
    519 
    520 
    521 /* dev extents record free space on individual devices.  The owner
    522  * field points back to the chunk allocation mapping tree that allocated
    523  * the extent.  The chunk tree uuid field is a way to double check the owner
    524  */
    525 struct btrfs_dev_extent {
    526 	__le64 chunk_tree;
    527 	__le64 chunk_objectid;
    528 	__le64 chunk_offset;
    529 	__le64 length;
    530 	__u8 chunk_tree_uuid[BTRFS_UUID_SIZE];
    531 } __attribute__ ((__packed__));
    532 
    533 struct btrfs_inode_ref {
    534 	__le64 index;
    535 	__le16 name_len;
    536 	/* name goes here */
    537 } __attribute__ ((__packed__));
    538 
    539 struct btrfs_inode_extref {
    540 	__le64 parent_objectid;
    541 	__le64 index;
    542 	__le16 name_len;
    543 	__u8   name[0];
    544 	/* name goes here */
    545 } __attribute__ ((__packed__));
    546 
    547 struct btrfs_timespec {
    548 	__le64 sec;
    549 	__le32 nsec;
    550 } __attribute__ ((__packed__));
    551 
    552 struct btrfs_inode_item {
    553 	/* nfs style generation number */
    554 	__le64 generation;
    555 	/* transid that last touched this inode */
    556 	__le64 transid;
    557 	__le64 size;
    558 	__le64 nbytes;
    559 	__le64 block_group;
    560 	__le32 nlink;
    561 	__le32 uid;
    562 	__le32 gid;
    563 	__le32 mode;
    564 	__le64 rdev;
    565 	__le64 flags;
    566 
    567 	/* modification sequence number for NFS */
    568 	__le64 sequence;
    569 
    570 	/*
    571 	 * a little future expansion, for more than this we can
    572 	 * just grow the inode item and version it
    573 	 */
    574 	__le64 reserved[4];
    575 	struct btrfs_timespec atime;
    576 	struct btrfs_timespec ctime;
    577 	struct btrfs_timespec mtime;
    578 	struct btrfs_timespec otime;
    579 } __attribute__ ((__packed__));
    580 
    581 struct btrfs_dir_log_item {
    582 	__le64 end;
    583 } __attribute__ ((__packed__));
    584 
    585 struct btrfs_dir_item {
    586 	struct btrfs_disk_key location;
    587 	__le64 transid;
    588 	__le16 data_len;
    589 	__le16 name_len;
    590 	__u8 type;
    591 } __attribute__ ((__packed__));
    592 
    593 #define BTRFS_ROOT_SUBVOL_RDONLY	(1ULL << 0)
    594 
    595 /*
    596  * Internal in-memory flag that a subvolume has been marked for deletion but
    597  * still visible as a directory
    598  */
    599 #define BTRFS_ROOT_SUBVOL_DEAD		(1ULL << 48)
    600 
    601 struct btrfs_root_item {
    602 	struct btrfs_inode_item inode;
    603 	__le64 generation;
    604 	__le64 root_dirid;
    605 	__le64 bytenr;
    606 	__le64 byte_limit;
    607 	__le64 bytes_used;
    608 	__le64 last_snapshot;
    609 	__le64 flags;
    610 	__le32 refs;
    611 	struct btrfs_disk_key drop_progress;
    612 	__u8 drop_level;
    613 	__u8 level;
    614 
    615 	/*
    616 	 * The following fields appear after subvol_uuids+subvol_times
    617 	 * were introduced.
    618 	 */
    619 
    620 	/*
    621 	 * This generation number is used to test if the new fields are valid
    622 	 * and up to date while reading the root item. Every time the root item
    623 	 * is written out, the "generation" field is copied into this field. If
    624 	 * anyone ever mounted the fs with an older kernel, we will have
    625 	 * mismatching generation values here and thus must invalidate the
    626 	 * new fields. See btrfs_update_root and btrfs_find_last_root for
    627 	 * details.
    628 	 * the offset of generation_v2 is also used as the start for the memset
    629 	 * when invalidating the fields.
    630 	 */
    631 	__le64 generation_v2;
    632 	__u8 uuid[BTRFS_UUID_SIZE];
    633 	__u8 parent_uuid[BTRFS_UUID_SIZE];
    634 	__u8 received_uuid[BTRFS_UUID_SIZE];
    635 	__le64 ctransid; /* updated when an inode changes */
    636 	__le64 otransid; /* trans when created */
    637 	__le64 stransid; /* trans when sent. non-zero for received subvol */
    638 	__le64 rtransid; /* trans when received. non-zero for received subvol */
    639 	struct btrfs_timespec ctime;
    640 	struct btrfs_timespec otime;
    641 	struct btrfs_timespec stime;
    642 	struct btrfs_timespec rtime;
    643 	__le64 reserved[8]; /* for future */
    644 } __attribute__ ((__packed__));
    645 
    646 /*
    647  * this is used for both forward and backward root refs
    648  */
    649 struct btrfs_root_ref {
    650 	__le64 dirid;
    651 	__le64 sequence;
    652 	__le16 name_len;
    653 } __attribute__ ((__packed__));
    654 
    655 struct btrfs_disk_balance_args {
    656 	/*
    657 	 * profiles to operate on, single is denoted by
    658 	 * BTRFS_AVAIL_ALLOC_BIT_SINGLE
    659 	 */
    660 	__le64 profiles;
    661 
    662 	/*
    663 	 * usage filter
    664 	 * BTRFS_BALANCE_ARGS_USAGE with a single value means '0..N'
    665 	 * BTRFS_BALANCE_ARGS_USAGE_RANGE - range syntax, min..max
    666 	 */
    667 	union {
    668 		__le64 usage;
    669 		struct {
    670 			__le32 usage_min;
    671 			__le32 usage_max;
    672 		};
    673 	};
    674 
    675 	/* devid filter */
    676 	__le64 devid;
    677 
    678 	/* devid subset filter [pstart..pend) */
    679 	__le64 pstart;
    680 	__le64 pend;
    681 
    682 	/* btrfs virtual address space subset filter [vstart..vend) */
    683 	__le64 vstart;
    684 	__le64 vend;
    685 
    686 	/*
    687 	 * profile to convert to, single is denoted by
    688 	 * BTRFS_AVAIL_ALLOC_BIT_SINGLE
    689 	 */
    690 	__le64 target;
    691 
    692 	/* BTRFS_BALANCE_ARGS_* */
    693 	__le64 flags;
    694 
    695 	/*
    696 	 * BTRFS_BALANCE_ARGS_LIMIT with value 'limit'
    697 	 * BTRFS_BALANCE_ARGS_LIMIT_RANGE - the extend version can use minimum
    698 	 * and maximum
    699 	 */
    700 	union {
    701 		__le64 limit;
    702 		struct {
    703 			__le32 limit_min;
    704 			__le32 limit_max;
    705 		};
    706 	};
    707 
    708 	/*
    709 	 * Process chunks that cross stripes_min..stripes_max devices,
    710 	 * BTRFS_BALANCE_ARGS_STRIPES_RANGE
    711 	 */
    712 	__le32 stripes_min;
    713 	__le32 stripes_max;
    714 
    715 	__le64 unused[6];
    716 } __attribute__ ((__packed__));
    717 
    718 /*
    719  * store balance parameters to disk so that balance can be properly
    720  * resumed after crash or unmount
    721  */
    722 struct btrfs_balance_item {
    723 	/* BTRFS_BALANCE_* */
    724 	__le64 flags;
    725 
    726 	struct btrfs_disk_balance_args data;
    727 	struct btrfs_disk_balance_args meta;
    728 	struct btrfs_disk_balance_args sys;
    729 
    730 	__le64 unused[4];
    731 } __attribute__ ((__packed__));
    732 
    733 #define BTRFS_FILE_EXTENT_INLINE 0
    734 #define BTRFS_FILE_EXTENT_REG 1
    735 #define BTRFS_FILE_EXTENT_PREALLOC 2
    736 #define BTRFS_FILE_EXTENT_TYPES	2
    737 
    738 struct btrfs_file_extent_item {
    739 	/*
    740 	 * transaction id that created this extent
    741 	 */
    742 	__le64 generation;
    743 	/*
    744 	 * max number of bytes to hold this extent in ram
    745 	 * when we split a compressed extent we can't know how big
    746 	 * each of the resulting pieces will be.  So, this is
    747 	 * an upper limit on the size of the extent in ram instead of
    748 	 * an exact limit.
    749 	 */
    750 	__le64 ram_bytes;
    751 
    752 	/*
    753 	 * 32 bits for the various ways we might encode the data,
    754 	 * including compression and encryption.  If any of these
    755 	 * are set to something a given disk format doesn't understand
    756 	 * it is treated like an incompat flag for reading and writing,
    757 	 * but not for stat.
    758 	 */
    759 	__u8 compression;
    760 	__u8 encryption;
    761 	__le16 other_encoding; /* spare for later use */
    762 
    763 	/* are we inline data or a real extent? */
    764 	__u8 type;
    765 
    766 	/*
    767 	 * disk space consumed by the extent, checksum blocks are included
    768 	 * in these numbers
    769 	 *
    770 	 * At this offset in the structure, the inline extent data start.
    771 	 */
    772 	__le64 disk_bytenr;
    773 	__le64 disk_num_bytes;
    774 	/*
    775 	 * the logical offset in file blocks (no csums)
    776 	 * this extent record is for.  This allows a file extent to point
    777 	 * into the middle of an existing extent on disk, sharing it
    778 	 * between two snapshots (useful if some bytes in the middle of the
    779 	 * extent have changed
    780 	 */
    781 	__le64 offset;
    782 	/*
    783 	 * the logical number of file blocks (no csums included).  This
    784 	 * always reflects the size uncompressed and without encoding.
    785 	 */
    786 	__le64 num_bytes;
    787 
    788 } __attribute__ ((__packed__));
    789 
    790 struct btrfs_csum_item {
    791 	__u8 csum;
    792 } __attribute__ ((__packed__));
    793 
    794 struct btrfs_dev_stats_item {
    795 	/*
    796 	 * grow this item struct at the end for future enhancements and keep
    797 	 * the existing values unchanged
    798 	 */
    799 	__le64 values[BTRFS_DEV_STAT_VALUES_MAX];
    800 } __attribute__ ((__packed__));
    801 
    802 #define BTRFS_DEV_REPLACE_ITEM_CONT_READING_FROM_SRCDEV_MODE_ALWAYS	0
    803 #define BTRFS_DEV_REPLACE_ITEM_CONT_READING_FROM_SRCDEV_MODE_AVOID	1
    804 #define BTRFS_DEV_REPLACE_ITEM_STATE_NEVER_STARTED	0
    805 #define BTRFS_DEV_REPLACE_ITEM_STATE_STARTED		1
    806 #define BTRFS_DEV_REPLACE_ITEM_STATE_SUSPENDED		2
    807 #define BTRFS_DEV_REPLACE_ITEM_STATE_FINISHED		3
    808 #define BTRFS_DEV_REPLACE_ITEM_STATE_CANCELED		4
    809 
    810 struct btrfs_dev_replace_item {
    811 	/*
    812 	 * grow this item struct at the end for future enhancements and keep
    813 	 * the existing values unchanged
    814 	 */
    815 	__le64 src_devid;
    816 	__le64 cursor_left;
    817 	__le64 cursor_right;
    818 	__le64 cont_reading_from_srcdev_mode;
    819 
    820 	__le64 replace_state;
    821 	__le64 time_started;
    822 	__le64 time_stopped;
    823 	__le64 num_write_errors;
    824 	__le64 num_uncorrectable_read_errors;
    825 } __attribute__ ((__packed__));
    826 
    827 /* different types of block groups (and chunks) */
    828 #define BTRFS_BLOCK_GROUP_DATA		(1ULL << 0)
    829 #define BTRFS_BLOCK_GROUP_SYSTEM	(1ULL << 1)
    830 #define BTRFS_BLOCK_GROUP_METADATA	(1ULL << 2)
    831 #define BTRFS_BLOCK_GROUP_RAID0		(1ULL << 3)
    832 #define BTRFS_BLOCK_GROUP_RAID1		(1ULL << 4)
    833 #define BTRFS_BLOCK_GROUP_DUP		(1ULL << 5)
    834 #define BTRFS_BLOCK_GROUP_RAID10	(1ULL << 6)
    835 #define BTRFS_BLOCK_GROUP_RAID5         (1ULL << 7)
    836 #define BTRFS_BLOCK_GROUP_RAID6         (1ULL << 8)
    837 #define BTRFS_BLOCK_GROUP_RESERVED	(BTRFS_AVAIL_ALLOC_BIT_SINGLE | \
    838 					 BTRFS_SPACE_INFO_GLOBAL_RSV)
    839 
    840 enum btrfs_raid_types {
    841 	BTRFS_RAID_RAID10,
    842 	BTRFS_RAID_RAID1,
    843 	BTRFS_RAID_DUP,
    844 	BTRFS_RAID_RAID0,
    845 	BTRFS_RAID_SINGLE,
    846 	BTRFS_RAID_RAID5,
    847 	BTRFS_RAID_RAID6,
    848 	BTRFS_NR_RAID_TYPES
    849 };
    850 
    851 #define BTRFS_BLOCK_GROUP_TYPE_MASK	(BTRFS_BLOCK_GROUP_DATA |    \
    852 					 BTRFS_BLOCK_GROUP_SYSTEM |  \
    853 					 BTRFS_BLOCK_GROUP_METADATA)
    854 
    855 #define BTRFS_BLOCK_GROUP_PROFILE_MASK	(BTRFS_BLOCK_GROUP_RAID0 |   \
    856 					 BTRFS_BLOCK_GROUP_RAID1 |   \
    857 					 BTRFS_BLOCK_GROUP_RAID5 |   \
    858 					 BTRFS_BLOCK_GROUP_RAID6 |   \
    859 					 BTRFS_BLOCK_GROUP_DUP |     \
    860 					 BTRFS_BLOCK_GROUP_RAID10)
    861 #define BTRFS_BLOCK_GROUP_RAID56_MASK	(BTRFS_BLOCK_GROUP_RAID5 |   \
    862 					 BTRFS_BLOCK_GROUP_RAID6)
    863 
    864 /*
    865  * We need a bit for restriper to be able to tell when chunks of type
    866  * SINGLE are available.  This "extended" profile format is used in
    867  * fs_info->avail_*_alloc_bits (in-memory) and balance item fields
    868  * (on-disk).  The corresponding on-disk bit in chunk.type is reserved
    869  * to avoid remappings between two formats in future.
    870  */
    871 #define BTRFS_AVAIL_ALLOC_BIT_SINGLE	(1ULL << 48)
    872 
    873 /*
    874  * A fake block group type that is used to communicate global block reserve
    875  * size to userspace via the SPACE_INFO ioctl.
    876  */
    877 #define BTRFS_SPACE_INFO_GLOBAL_RSV	(1ULL << 49)
    878 
    879 #define BTRFS_EXTENDED_PROFILE_MASK	(BTRFS_BLOCK_GROUP_PROFILE_MASK | \
    880 					 BTRFS_AVAIL_ALLOC_BIT_SINGLE)
    881 
    882 static inline __u64 chunk_to_extended(__u64 flags)
    883 {
    884 	if ((flags & BTRFS_BLOCK_GROUP_PROFILE_MASK) == 0)
    885 		flags |= BTRFS_AVAIL_ALLOC_BIT_SINGLE;
    886 
    887 	return flags;
    888 }
    889 static inline __u64 extended_to_chunk(__u64 flags)
    890 {
    891 	return flags & ~BTRFS_AVAIL_ALLOC_BIT_SINGLE;
    892 }
    893 
    894 struct btrfs_block_group_item {
    895 	__le64 used;
    896 	__le64 chunk_objectid;
    897 	__le64 flags;
    898 } __attribute__ ((__packed__));
    899 
    900 struct btrfs_free_space_info {
    901 	__le32 extent_count;
    902 	__le32 flags;
    903 } __attribute__ ((__packed__));
    904 
    905 #define BTRFS_FREE_SPACE_USING_BITMAPS (1ULL << 0)
    906 
    907 #define BTRFS_QGROUP_LEVEL_SHIFT		48
    908 static inline __u64 btrfs_qgroup_level(__u64 qgroupid)
    909 {
    910 	return qgroupid >> BTRFS_QGROUP_LEVEL_SHIFT;
    911 }
    912 
    913 /*
    914  * is subvolume quota turned on?
    915  */
    916 #define BTRFS_QGROUP_STATUS_FLAG_ON		(1ULL << 0)
    917 /*
    918  * RESCAN is set during the initialization phase
    919  */
    920 #define BTRFS_QGROUP_STATUS_FLAG_RESCAN		(1ULL << 1)
    921 /*
    922  * Some qgroup entries are known to be out of date,
    923  * either because the configuration has changed in a way that
    924  * makes a rescan necessary, or because the fs has been mounted
    925  * with a non-qgroup-aware version.
    926  * Turning qouta off and on again makes it inconsistent, too.
    927  */
    928 #define BTRFS_QGROUP_STATUS_FLAG_INCONSISTENT	(1ULL << 2)
    929 
    930 #define BTRFS_QGROUP_STATUS_VERSION        1
    931 
    932 struct btrfs_qgroup_status_item {
    933 	__le64 version;
    934 	/*
    935 	 * the generation is updated during every commit. As older
    936 	 * versions of btrfs are not aware of qgroups, it will be
    937 	 * possible to detect inconsistencies by checking the
    938 	 * generation on mount time
    939 	 */
    940 	__le64 generation;
    941 
    942 	/* flag definitions see above */
    943 	__le64 flags;
    944 
    945 	/*
    946 	 * only used during scanning to record the progress
    947 	 * of the scan. It contains a logical address
    948 	 */
    949 	__le64 rescan;
    950 } __attribute__ ((__packed__));
    951 
    952 struct btrfs_qgroup_info_item {
    953 	__le64 generation;
    954 	__le64 rfer;
    955 	__le64 rfer_cmpr;
    956 	__le64 excl;
    957 	__le64 excl_cmpr;
    958 } __attribute__ ((__packed__));
    959 
    960 struct btrfs_qgroup_limit_item {
    961 	/*
    962 	 * only updated when any of the other values change
    963 	 */
    964 	__le64 flags;
    965 	__le64 max_rfer;
    966 	__le64 max_excl;
    967 	__le64 rsv_rfer;
    968 	__le64 rsv_excl;
    969 } __attribute__ ((__packed__));
    970 
    971 #endif /* _BTRFS_CTREE_H_ */
    972