2 * Generic btrfs header file. Thanks to whoever it was who wrote
3 * https://btrfs.wiki.kernel.org/index.php/On-disk_Format - you saved me a lot of time!
5 * I release this file, and this file only, into the public domain - do whatever
6 * you want with it. You don't have to, but I'd appreciate if you let me know if you
7 * use it anything cool - mark@harmstone.com. */
9 #ifndef BTRFS_H_DEFINED
10 #define BTRFS_H_DEFINED
12 static const UINT64 superblock_addrs
[] = { 0x10000, 0x4000000, 0x4000000000, 0x4000000000000, 0 };
14 #define BTRFS_MAGIC 0x4d5f53665248425f
15 #define MAX_LABEL_SIZE 0x100
16 #define SUBVOL_ROOT_INODE 0x100
18 #define TYPE_INODE_ITEM 0x01
19 #define TYPE_INODE_REF 0x0C
20 #define TYPE_INODE_EXTREF 0x0D
21 #define TYPE_XATTR_ITEM 0x18
22 #define TYPE_DIR_ITEM 0x54
23 #define TYPE_DIR_INDEX 0x60
24 #define TYPE_EXTENT_DATA 0x6C
25 #define TYPE_EXTENT_CSUM 0x80
26 #define TYPE_ROOT_ITEM 0x84
27 #define TYPE_ROOT_BACKREF 0x90
28 #define TYPE_ROOT_REF 0x9C
29 #define TYPE_EXTENT_ITEM 0xA8
30 #define TYPE_METADATA_ITEM 0xA9
31 #define TYPE_TREE_BLOCK_REF 0xB0
32 #define TYPE_EXTENT_DATA_REF 0xB2
33 #define TYPE_EXTENT_REF_V0 0xB4
34 #define TYPE_SHARED_BLOCK_REF 0xB6
35 #define TYPE_SHARED_DATA_REF 0xB8
36 #define TYPE_BLOCK_GROUP_ITEM 0xC0
37 #define TYPE_DEV_EXTENT 0xCC
38 #define TYPE_DEV_ITEM 0xD8
39 #define TYPE_CHUNK_ITEM 0xE4
41 #define BTRFS_ROOT_ROOT 1
42 #define BTRFS_ROOT_EXTENT 2
43 #define BTRFS_ROOT_CHUNK 3
44 #define BTRFS_ROOT_DEVTREE 4
45 #define BTRFS_ROOT_FSTREE 5
46 #define BTRFS_ROOT_CHECKSUM 7
48 #define BTRFS_COMPRESSION_NONE 0
49 #define BTRFS_COMPRESSION_ZLIB 1
50 #define BTRFS_COMPRESSION_LZO 2
52 #define BTRFS_ENCRYPTION_NONE 0
54 #define BTRFS_ENCODING_NONE 0
56 #define EXTENT_TYPE_INLINE 0
57 #define EXTENT_TYPE_REGULAR 1
58 #define EXTENT_TYPE_PREALLOC 2
60 #define BLOCK_FLAG_DATA 0x001
61 #define BLOCK_FLAG_SYSTEM 0x002
62 #define BLOCK_FLAG_METADATA 0x004
63 #define BLOCK_FLAG_RAID0 0x008
64 #define BLOCK_FLAG_RAID1 0x010
65 #define BLOCK_FLAG_DUPLICATE 0x020
66 #define BLOCK_FLAG_RAID10 0x040
67 #define BLOCK_FLAG_RAID5 0x080
68 #define BLOCK_FLAG_RAID6 0x100
70 #define FREE_SPACE_CACHE_ID 0xFFFFFFFFFFFFFFF5
71 #define EXTENT_CSUM_ID 0xFFFFFFFFFFFFFFF6
73 #define BTRFS_INODE_NODATASUM 0x001
74 #define BTRFS_INODE_NODATACOW 0x002
75 #define BTRFS_INODE_READONLY 0x004
76 #define BTRFS_INODE_NOCOMPRESS 0x008
77 #define BTRFS_INODE_PREALLOC 0x010
78 #define BTRFS_INODE_SYNC 0x020
79 #define BTRFS_INODE_IMMUTABLE 0x040
80 #define BTRFS_INODE_APPEND 0x080
81 #define BTRFS_INODE_NODUMP 0x100
82 #define BTRFS_INODE_NOATIME 0x200
83 #define BTRFS_INODE_DIRSYNC 0x400
84 #define BTRFS_INODE_COMPRESS 0x800
86 #define BTRFS_SUBVOL_READONLY 0x1
88 #define BTRFS_COMPAT_RO_FLAGS_FREE_SPACE_CACHE 0x1
90 #define BTRFS_INCOMPAT_FLAGS_MIXED_BACKREF 0x0001
91 #define BTRFS_INCOMPAT_FLAGS_DEFAULT_SUBVOL 0x0002
92 #define BTRFS_INCOMPAT_FLAGS_MIXED_GROUPS 0x0004
93 #define BTRFS_INCOMPAT_FLAGS_COMPRESS_LZO 0x0008
94 #define BTRFS_INCOMPAT_FLAGS_COMPRESS_LZOV2 0x0010
95 #define BTRFS_INCOMPAT_FLAGS_BIG_METADATA 0x0020
96 #define BTRFS_INCOMPAT_FLAGS_EXTENDED_IREF 0x0040
97 #define BTRFS_INCOMPAT_FLAGS_RAID56 0x0080
98 #define BTRFS_INCOMPAT_FLAGS_SKINNY_METADATA 0x0100
99 #define BTRFS_INCOMPAT_FLAGS_NO_HOLES 0x0200
101 #pragma pack(push, 1)
113 #define HEADER_FLAG_MIXED_BACKREF 0x100000000000000
114 #define HEADER_FLAG_SHARED_BACKREF 0x000000000000002
121 BTRFS_UUID chunk_tree_uuid
;
144 UINT32 optimal_io_align
;
145 UINT32 optimal_io_width
;
146 UINT32 minimal_io_size
;
153 BTRFS_UUID device_uuid
;
157 #define SYS_CHUNK_ARRAY_SIZE 0x800
166 UINT64 root_tree_addr
;
167 UINT64 chunk_tree_addr
;
168 UINT64 log_tree_addr
;
169 UINT64 log_root_transid
;
172 UINT64 root_dir_objectid
;
179 UINT64 chunk_root_generation
;
181 UINT64 compat_ro_flags
;
182 UINT64 incompat_flags
;
185 UINT8 chunk_root_level
;
186 UINT8 log_root_level
;
188 char label
[MAX_LABEL_SIZE
];
189 UINT64 cache_generation
;
190 UINT64 uuid_tree_generation
;
192 UINT8 sys_chunk_array
[SYS_CHUNK_ARRAY_SIZE
];
193 // struct btrfs_root_backup super_roots[BTRFS_NUM_BACKUP_ROOTS];
194 UINT8 reserved2
[1237];
197 #define BTRFS_TYPE_UNKNOWN 0
198 #define BTRFS_TYPE_FILE 1
199 #define BTRFS_TYPE_DIRECTORY 2
200 #define BTRFS_TYPE_CHARDEV 3
201 #define BTRFS_TYPE_BLOCKDEV 4
202 #define BTRFS_TYPE_FIFO 5
203 #define BTRFS_TYPE_SOCKET 6
204 #define BTRFS_TYPE_SYMLINK 7
205 #define BTRFS_TYPE_EA 8
248 UINT64 last_snapshot_generation
;
250 UINT32 num_references
;
256 BTRFS_UUID parent_uuid
;
257 BTRFS_UUID received_uuid
;
272 UINT64 stripe_length
;
274 UINT32 opt_io_alignment
;
317 #define EXTENT_ITEM_DATA 0x001
318 #define EXTENT_ITEM_TREE_BLOCK 0x002
319 #define EXTENT_ITEM_SHARED_BACKREFS 0x100
332 EXTENT_ITEM extent_item
;
370 #define FREE_SPACE_EXTENT 1
371 #define FREE_SPACE_BITMAP 2
398 BTRFS_UUID chunktree_uuid
;