xref: /openbmc/u-boot/fs/btrfs/btrfs_tree.h (revision e8f80a5a)
1*83d290c5STom Rini /* SPDX-License-Identifier: GPL-2.0+ */
2d4a704afSMarek Behún /*
3d4a704afSMarek Behún  * From linux/include/uapi/linux/btrfs_tree.h
4d4a704afSMarek Behún  */
5d4a704afSMarek Behún 
6d4a704afSMarek Behún #ifndef __BTRFS_BTRFS_TREE_H__
7d4a704afSMarek Behún #define __BTRFS_BTRFS_TREE_H__
8d4a704afSMarek Behún 
9d4a704afSMarek Behún #include <common.h>
10d4a704afSMarek Behún 
11d4a704afSMarek Behún #define BTRFS_VOL_NAME_MAX 255
12d4a704afSMarek Behún #define BTRFS_NAME_MAX 255
13d4a704afSMarek Behún #define BTRFS_LABEL_SIZE 256
14d4a704afSMarek Behún #define BTRFS_FSID_SIZE 16
15d4a704afSMarek Behún #define BTRFS_UUID_SIZE 16
16d4a704afSMarek Behún 
17d4a704afSMarek Behún /*
18d4a704afSMarek Behún  * This header contains the structure definitions and constants used
19d4a704afSMarek Behún  * by file system objects that can be retrieved using
20d4a704afSMarek Behún  * the BTRFS_IOC_SEARCH_TREE ioctl.  That means basically anything that
21d4a704afSMarek Behún  * is needed to describe a leaf node's key or item contents.
22d4a704afSMarek Behún  */
23d4a704afSMarek Behún 
24d4a704afSMarek Behún /* holds pointers to all of the tree roots */
25d4a704afSMarek Behún #define BTRFS_ROOT_TREE_OBJECTID 1ULL
26d4a704afSMarek Behún 
27d4a704afSMarek Behún /* stores information about which extents are in use, and reference counts */
28d4a704afSMarek Behún #define BTRFS_EXTENT_TREE_OBJECTID 2ULL
29d4a704afSMarek Behún 
30d4a704afSMarek Behún /*
31d4a704afSMarek Behún  * chunk tree stores translations from logical -> physical block numbering
32d4a704afSMarek Behún  * the super block points to the chunk tree
33d4a704afSMarek Behún  */
34d4a704afSMarek Behún #define BTRFS_CHUNK_TREE_OBJECTID 3ULL
35d4a704afSMarek Behún 
36d4a704afSMarek Behún /*
37d4a704afSMarek Behún  * stores information about which areas of a given device are in use.
38d4a704afSMarek Behún  * one per device.  The tree of tree roots points to the device tree
39d4a704afSMarek Behún  */
40d4a704afSMarek Behún #define BTRFS_DEV_TREE_OBJECTID 4ULL
41d4a704afSMarek Behún 
42d4a704afSMarek Behún /* one per subvolume, storing files and directories */
43d4a704afSMarek Behún #define BTRFS_FS_TREE_OBJECTID 5ULL
44d4a704afSMarek Behún 
45d4a704afSMarek Behún /* directory objectid inside the root tree */
46d4a704afSMarek Behún #define BTRFS_ROOT_TREE_DIR_OBJECTID 6ULL
47d4a704afSMarek Behún 
48d4a704afSMarek Behún /* holds checksums of all the data extents */
49d4a704afSMarek Behún #define BTRFS_CSUM_TREE_OBJECTID 7ULL
50d4a704afSMarek Behún 
51d4a704afSMarek Behún /* holds quota configuration and tracking */
52d4a704afSMarek Behún #define BTRFS_QUOTA_TREE_OBJECTID 8ULL
53d4a704afSMarek Behún 
54d4a704afSMarek Behún /* for storing items that use the BTRFS_UUID_KEY* types */
55d4a704afSMarek Behún #define BTRFS_UUID_TREE_OBJECTID 9ULL
56d4a704afSMarek Behún 
57d4a704afSMarek Behún /* tracks free space in block groups. */
58d4a704afSMarek Behún #define BTRFS_FREE_SPACE_TREE_OBJECTID 10ULL
59d4a704afSMarek Behún 
60d4a704afSMarek Behún /* device stats in the device tree */
61d4a704afSMarek Behún #define BTRFS_DEV_STATS_OBJECTID 0ULL
62d4a704afSMarek Behún 
63d4a704afSMarek Behún /* for storing balance parameters in the root tree */
64d4a704afSMarek Behún #define BTRFS_BALANCE_OBJECTID -4ULL
65d4a704afSMarek Behún 
66d4a704afSMarek Behún /* orhpan objectid for tracking unlinked/truncated files */
67d4a704afSMarek Behún #define BTRFS_ORPHAN_OBJECTID -5ULL
68d4a704afSMarek Behún 
69d4a704afSMarek Behún /* does write ahead logging to speed up fsyncs */
70d4a704afSMarek Behún #define BTRFS_TREE_LOG_OBJECTID -6ULL
71d4a704afSMarek Behún #define BTRFS_TREE_LOG_FIXUP_OBJECTID -7ULL
72d4a704afSMarek Behún 
73d4a704afSMarek Behún /* for space balancing */
74d4a704afSMarek Behún #define BTRFS_TREE_RELOC_OBJECTID -8ULL
75d4a704afSMarek Behún #define BTRFS_DATA_RELOC_TREE_OBJECTID -9ULL
76d4a704afSMarek Behún 
77d4a704afSMarek Behún /*
78d4a704afSMarek Behún  * extent checksums all have this objectid
79d4a704afSMarek Behún  * this allows them to share the logging tree
80d4a704afSMarek Behún  * for fsyncs
81d4a704afSMarek Behún  */
82d4a704afSMarek Behún #define BTRFS_EXTENT_CSUM_OBJECTID -10ULL
83d4a704afSMarek Behún 
84d4a704afSMarek Behún /* For storing free space cache */
85d4a704afSMarek Behún #define BTRFS_FREE_SPACE_OBJECTID -11ULL
86d4a704afSMarek Behún 
87d4a704afSMarek Behún /*
88d4a704afSMarek Behún  * The inode number assigned to the special inode for storing
89d4a704afSMarek Behún  * free ino cache
90d4a704afSMarek Behún  */
91d4a704afSMarek Behún #define BTRFS_FREE_INO_OBJECTID -12ULL
92d4a704afSMarek Behún 
93d4a704afSMarek Behún /* dummy objectid represents multiple objectids */
94d4a704afSMarek Behún #define BTRFS_MULTIPLE_OBJECTIDS -255ULL
95d4a704afSMarek Behún 
96d4a704afSMarek Behún /*
97d4a704afSMarek Behún  * All files have objectids in this range.
98d4a704afSMarek Behún  */
99d4a704afSMarek Behún #define BTRFS_FIRST_FREE_OBJECTID 256ULL
100d4a704afSMarek Behún #define BTRFS_LAST_FREE_OBJECTID -256ULL
101d4a704afSMarek Behún #define BTRFS_FIRST_CHUNK_TREE_OBJECTID 256ULL
102d4a704afSMarek Behún 
103d4a704afSMarek Behún 
104d4a704afSMarek Behún /*
105d4a704afSMarek Behún  * the device items go into the chunk tree.  The key is in the form
106d4a704afSMarek Behún  * [ 1 BTRFS_DEV_ITEM_KEY device_id ]
107d4a704afSMarek Behún  */
108d4a704afSMarek Behún #define BTRFS_DEV_ITEMS_OBJECTID 1ULL
109d4a704afSMarek Behún 
110d4a704afSMarek Behún #define BTRFS_BTREE_INODE_OBJECTID 1
111d4a704afSMarek Behún 
112d4a704afSMarek Behún #define BTRFS_EMPTY_SUBVOL_DIR_OBJECTID 2
113d4a704afSMarek Behún 
114d4a704afSMarek Behún #define BTRFS_DEV_REPLACE_DEVID 0ULL
115d4a704afSMarek Behún 
116d4a704afSMarek Behún /*
117d4a704afSMarek Behún  * inode items have the data typically returned from stat and store other
118d4a704afSMarek Behún  * info about object characteristics.  There is one for every file and dir in
119d4a704afSMarek Behún  * the FS
120d4a704afSMarek Behún  */
121d4a704afSMarek Behún #define BTRFS_INODE_ITEM_KEY		1
122d4a704afSMarek Behún #define BTRFS_INODE_REF_KEY		12
123d4a704afSMarek Behún #define BTRFS_INODE_EXTREF_KEY		13
124d4a704afSMarek Behún #define BTRFS_XATTR_ITEM_KEY		24
125d4a704afSMarek Behún #define BTRFS_ORPHAN_ITEM_KEY		48
126d4a704afSMarek Behún /* reserve 2-15 close to the inode for later flexibility */
127d4a704afSMarek Behún 
128d4a704afSMarek Behún /*
129d4a704afSMarek Behún  * dir items are the name -> inode pointers in a directory.  There is one
130d4a704afSMarek Behún  * for every name in a directory.
131d4a704afSMarek Behún  */
132d4a704afSMarek Behún #define BTRFS_DIR_LOG_ITEM_KEY  60
133d4a704afSMarek Behún #define BTRFS_DIR_LOG_INDEX_KEY 72
134d4a704afSMarek Behún #define BTRFS_DIR_ITEM_KEY	84
135d4a704afSMarek Behún #define BTRFS_DIR_INDEX_KEY	96
136d4a704afSMarek Behún /*
137d4a704afSMarek Behún  * extent data is for file data
138d4a704afSMarek Behún  */
139d4a704afSMarek Behún #define BTRFS_EXTENT_DATA_KEY	108
140d4a704afSMarek Behún 
141d4a704afSMarek Behún /*
142d4a704afSMarek Behún  * extent csums are stored in a separate tree and hold csums for
143d4a704afSMarek Behún  * an entire extent on disk.
144d4a704afSMarek Behún  */
145d4a704afSMarek Behún #define BTRFS_EXTENT_CSUM_KEY	128
146d4a704afSMarek Behún 
147d4a704afSMarek Behún /*
148d4a704afSMarek Behún  * root items point to tree roots.  They are typically in the root
149d4a704afSMarek Behún  * tree used by the super block to find all the other trees
150d4a704afSMarek Behún  */
151d4a704afSMarek Behún #define BTRFS_ROOT_ITEM_KEY	132
152d4a704afSMarek Behún 
153d4a704afSMarek Behún /*
154d4a704afSMarek Behún  * root backrefs tie subvols and snapshots to the directory entries that
155d4a704afSMarek Behún  * reference them
156d4a704afSMarek Behún  */
157d4a704afSMarek Behún #define BTRFS_ROOT_BACKREF_KEY	144
158d4a704afSMarek Behún 
159d4a704afSMarek Behún /*
160d4a704afSMarek Behún  * root refs make a fast index for listing all of the snapshots and
161d4a704afSMarek Behún  * subvolumes referenced by a given root.  They point directly to the
162d4a704afSMarek Behún  * directory item in the root that references the subvol
163d4a704afSMarek Behún  */
164d4a704afSMarek Behún #define BTRFS_ROOT_REF_KEY	156
165d4a704afSMarek Behún 
166d4a704afSMarek Behún /*
167d4a704afSMarek Behún  * extent items are in the extent map tree.  These record which blocks
168d4a704afSMarek Behún  * are used, and how many references there are to each block
169d4a704afSMarek Behún  */
170d4a704afSMarek Behún #define BTRFS_EXTENT_ITEM_KEY	168
171d4a704afSMarek Behún 
172d4a704afSMarek Behún /*
173d4a704afSMarek Behún  * The same as the BTRFS_EXTENT_ITEM_KEY, except it's metadata we already know
174d4a704afSMarek Behún  * the length, so we save the level in key->offset instead of the length.
175d4a704afSMarek Behún  */
176d4a704afSMarek Behún #define BTRFS_METADATA_ITEM_KEY	169
177d4a704afSMarek Behún 
178d4a704afSMarek Behún #define BTRFS_TREE_BLOCK_REF_KEY	176
179d4a704afSMarek Behún 
180d4a704afSMarek Behún #define BTRFS_EXTENT_DATA_REF_KEY	178
181d4a704afSMarek Behún 
182d4a704afSMarek Behún #define BTRFS_EXTENT_REF_V0_KEY		180
183d4a704afSMarek Behún 
184d4a704afSMarek Behún #define BTRFS_SHARED_BLOCK_REF_KEY	182
185d4a704afSMarek Behún 
186d4a704afSMarek Behún #define BTRFS_SHARED_DATA_REF_KEY	184
187d4a704afSMarek Behún 
188d4a704afSMarek Behún /*
189d4a704afSMarek Behún  * block groups give us hints into the extent allocation trees.  Which
190d4a704afSMarek Behún  * blocks are free etc etc
191d4a704afSMarek Behún  */
192d4a704afSMarek Behún #define BTRFS_BLOCK_GROUP_ITEM_KEY 192
193d4a704afSMarek Behún 
194d4a704afSMarek Behún /*
195d4a704afSMarek Behún  * Every block group is represented in the free space tree by a free space info
196d4a704afSMarek Behún  * item, which stores some accounting information. It is keyed on
197d4a704afSMarek Behún  * (block_group_start, FREE_SPACE_INFO, block_group_length).
198d4a704afSMarek Behún  */
199d4a704afSMarek Behún #define BTRFS_FREE_SPACE_INFO_KEY 198
200d4a704afSMarek Behún 
201d4a704afSMarek Behún /*
202d4a704afSMarek Behún  * A free space extent tracks an extent of space that is free in a block group.
203d4a704afSMarek Behún  * It is keyed on (start, FREE_SPACE_EXTENT, length).
204d4a704afSMarek Behún  */
205d4a704afSMarek Behún #define BTRFS_FREE_SPACE_EXTENT_KEY 199
206d4a704afSMarek Behún 
207d4a704afSMarek Behún /*
208d4a704afSMarek Behún  * When a block group becomes very fragmented, we convert it to use bitmaps
209d4a704afSMarek Behún  * instead of extents. A free space bitmap is keyed on
210d4a704afSMarek Behún  * (start, FREE_SPACE_BITMAP, length); the corresponding item is a bitmap with
211d4a704afSMarek Behún  * (length / sectorsize) bits.
212d4a704afSMarek Behún  */
213d4a704afSMarek Behún #define BTRFS_FREE_SPACE_BITMAP_KEY 200
214d4a704afSMarek Behún 
215d4a704afSMarek Behún #define BTRFS_DEV_EXTENT_KEY	204
216d4a704afSMarek Behún #define BTRFS_DEV_ITEM_KEY	216
217d4a704afSMarek Behún #define BTRFS_CHUNK_ITEM_KEY	228
218d4a704afSMarek Behún 
219d4a704afSMarek Behún /*
220d4a704afSMarek Behún  * Records the overall state of the qgroups.
221d4a704afSMarek Behún  * There's only one instance of this key present,
222d4a704afSMarek Behún  * (0, BTRFS_QGROUP_STATUS_KEY, 0)
223d4a704afSMarek Behún  */
224d4a704afSMarek Behún #define BTRFS_QGROUP_STATUS_KEY         240
225d4a704afSMarek Behún /*
226d4a704afSMarek Behún  * Records the currently used space of the qgroup.
227d4a704afSMarek Behún  * One key per qgroup, (0, BTRFS_QGROUP_INFO_KEY, qgroupid).
228d4a704afSMarek Behún  */
229d4a704afSMarek Behún #define BTRFS_QGROUP_INFO_KEY           242
230d4a704afSMarek Behún /*
231d4a704afSMarek Behún  * Contains the user configured limits for the qgroup.
232d4a704afSMarek Behún  * One key per qgroup, (0, BTRFS_QGROUP_LIMIT_KEY, qgroupid).
233d4a704afSMarek Behún  */
234d4a704afSMarek Behún #define BTRFS_QGROUP_LIMIT_KEY          244
235d4a704afSMarek Behún /*
236d4a704afSMarek Behún  * Records the child-parent relationship of qgroups. For
237d4a704afSMarek Behún  * each relation, 2 keys are present:
238d4a704afSMarek Behún  * (childid, BTRFS_QGROUP_RELATION_KEY, parentid)
239d4a704afSMarek Behún  * (parentid, BTRFS_QGROUP_RELATION_KEY, childid)
240d4a704afSMarek Behún  */
241d4a704afSMarek Behún #define BTRFS_QGROUP_RELATION_KEY       246
242d4a704afSMarek Behún 
243d4a704afSMarek Behún /*
244d4a704afSMarek Behún  * Obsolete name, see BTRFS_TEMPORARY_ITEM_KEY.
245d4a704afSMarek Behún  */
246d4a704afSMarek Behún #define BTRFS_BALANCE_ITEM_KEY	248
247d4a704afSMarek Behún 
248d4a704afSMarek Behún /*
249d4a704afSMarek Behún  * The key type for tree items that are stored persistently, but do not need to
250d4a704afSMarek Behún  * exist for extended period of time. The items can exist in any tree.
251d4a704afSMarek Behún  *
252d4a704afSMarek Behún  * [subtype, BTRFS_TEMPORARY_ITEM_KEY, data]
253d4a704afSMarek Behún  *
254d4a704afSMarek Behún  * Existing items:
255d4a704afSMarek Behún  *
256d4a704afSMarek Behún  * - balance status item
257d4a704afSMarek Behún  *   (BTRFS_BALANCE_OBJECTID, BTRFS_TEMPORARY_ITEM_KEY, 0)
258d4a704afSMarek Behún  */
259d4a704afSMarek Behún #define BTRFS_TEMPORARY_ITEM_KEY	248
260d4a704afSMarek Behún 
261d4a704afSMarek Behún /*
262d4a704afSMarek Behún  * Obsolete name, see BTRFS_PERSISTENT_ITEM_KEY
263d4a704afSMarek Behún  */
264d4a704afSMarek Behún #define BTRFS_DEV_STATS_KEY		249
265d4a704afSMarek Behún 
266d4a704afSMarek Behún /*
267d4a704afSMarek Behún  * The key type for tree items that are stored persistently and usually exist
268d4a704afSMarek Behún  * for a long period, eg. filesystem lifetime. The item kinds can be status
269d4a704afSMarek Behún  * information, stats or preference values. The item can exist in any tree.
270d4a704afSMarek Behún  *
271d4a704afSMarek Behún  * [subtype, BTRFS_PERSISTENT_ITEM_KEY, data]
272d4a704afSMarek Behún  *
273d4a704afSMarek Behún  * Existing items:
274d4a704afSMarek Behún  *
275d4a704afSMarek Behún  * - device statistics, store IO stats in the device tree, one key for all
276d4a704afSMarek Behún  *   stats
277d4a704afSMarek Behún  *   (BTRFS_DEV_STATS_OBJECTID, BTRFS_DEV_STATS_KEY, 0)
278d4a704afSMarek Behún  */
279d4a704afSMarek Behún #define BTRFS_PERSISTENT_ITEM_KEY	249
280d4a704afSMarek Behún 
281d4a704afSMarek Behún /*
282d4a704afSMarek Behún  * Persistantly stores the device replace state in the device tree.
283d4a704afSMarek Behún  * The key is built like this: (0, BTRFS_DEV_REPLACE_KEY, 0).
284d4a704afSMarek Behún  */
285d4a704afSMarek Behún #define BTRFS_DEV_REPLACE_KEY	250
286d4a704afSMarek Behún 
287d4a704afSMarek Behún /*
288d4a704afSMarek Behún  * Stores items that allow to quickly map UUIDs to something else.
289d4a704afSMarek Behún  * These items are part of the filesystem UUID tree.
290d4a704afSMarek Behún  * The key is built like this:
291d4a704afSMarek Behún  * (UUID_upper_64_bits, BTRFS_UUID_KEY*, UUID_lower_64_bits).
292d4a704afSMarek Behún  */
293d4a704afSMarek Behún #if BTRFS_UUID_SIZE != 16
294d4a704afSMarek Behún #error "UUID items require BTRFS_UUID_SIZE == 16!"
295d4a704afSMarek Behún #endif
296d4a704afSMarek Behún #define BTRFS_UUID_KEY_SUBVOL	251	/* for UUIDs assigned to subvols */
297d4a704afSMarek Behún #define BTRFS_UUID_KEY_RECEIVED_SUBVOL	252	/* for UUIDs assigned to
298d4a704afSMarek Behún 						 * received subvols */
299d4a704afSMarek Behún 
300d4a704afSMarek Behún /*
301d4a704afSMarek Behún  * string items are for debugging.  They just store a short string of
302d4a704afSMarek Behún  * data in the FS
303d4a704afSMarek Behún  */
304d4a704afSMarek Behún #define BTRFS_STRING_ITEM_KEY	253
305d4a704afSMarek Behún 
306d4a704afSMarek Behún 
307d4a704afSMarek Behún 
308d4a704afSMarek Behún /* 32 bytes in various csum fields */
309d4a704afSMarek Behún #define BTRFS_CSUM_SIZE 32
310d4a704afSMarek Behún 
311d4a704afSMarek Behún /* csum types */
312d4a704afSMarek Behún #define BTRFS_CSUM_TYPE_CRC32	0
313d4a704afSMarek Behún 
314d4a704afSMarek Behún /*
315d4a704afSMarek Behún  * flags definitions for directory entry item type
316d4a704afSMarek Behún  *
317d4a704afSMarek Behún  * Used by:
318d4a704afSMarek Behún  * struct btrfs_dir_item.type
319d4a704afSMarek Behún  */
320d4a704afSMarek Behún #define BTRFS_FT_UNKNOWN	0
321d4a704afSMarek Behún #define BTRFS_FT_REG_FILE	1
322d4a704afSMarek Behún #define BTRFS_FT_DIR		2
323d4a704afSMarek Behún #define BTRFS_FT_CHRDEV		3
324d4a704afSMarek Behún #define BTRFS_FT_BLKDEV		4
325d4a704afSMarek Behún #define BTRFS_FT_FIFO		5
326d4a704afSMarek Behún #define BTRFS_FT_SOCK		6
327d4a704afSMarek Behún #define BTRFS_FT_SYMLINK	7
328d4a704afSMarek Behún #define BTRFS_FT_XATTR		8
329d4a704afSMarek Behún #define BTRFS_FT_MAX		9
330d4a704afSMarek Behún 
331d4a704afSMarek Behún /*
332d4a704afSMarek Behún  * The key defines the order in the tree, and so it also defines (optimal)
333d4a704afSMarek Behún  * block layout.
334d4a704afSMarek Behún  *
335d4a704afSMarek Behún  * objectid corresponds to the inode number.
336d4a704afSMarek Behún  *
337d4a704afSMarek Behún  * type tells us things about the object, and is a kind of stream selector.
338d4a704afSMarek Behún  * so for a given inode, keys with type of 1 might refer to the inode data,
339d4a704afSMarek Behún  * type of 2 may point to file data in the btree and type == 3 may point to
340d4a704afSMarek Behún  * extents.
341d4a704afSMarek Behún  *
342d4a704afSMarek Behún  * offset is the starting byte offset for this key in the stream.
343d4a704afSMarek Behún  */
344d4a704afSMarek Behún 
345d4a704afSMarek Behún struct btrfs_key {
346d4a704afSMarek Behún 	__u64 objectid;
347d4a704afSMarek Behún 	__u8 type;
348d4a704afSMarek Behún 	__u64 offset;
349d4a704afSMarek Behún } __attribute__ ((__packed__));
350d4a704afSMarek Behún 
351d4a704afSMarek Behún struct btrfs_dev_item {
352d4a704afSMarek Behún 	/* the internal btrfs device id */
353d4a704afSMarek Behún 	__u64 devid;
354d4a704afSMarek Behún 
355d4a704afSMarek Behún 	/* size of the device */
356d4a704afSMarek Behún 	__u64 total_bytes;
357d4a704afSMarek Behún 
358d4a704afSMarek Behún 	/* bytes used */
359d4a704afSMarek Behún 	__u64 bytes_used;
360d4a704afSMarek Behún 
361d4a704afSMarek Behún 	/* optimal io alignment for this device */
362d4a704afSMarek Behún 	__u32 io_align;
363d4a704afSMarek Behún 
364d4a704afSMarek Behún 	/* optimal io width for this device */
365d4a704afSMarek Behún 	__u32 io_width;
366d4a704afSMarek Behún 
367d4a704afSMarek Behún 	/* minimal io size for this device */
368d4a704afSMarek Behún 	__u32 sector_size;
369d4a704afSMarek Behún 
370d4a704afSMarek Behún 	/* type and info about this device */
371d4a704afSMarek Behún 	__u64 type;
372d4a704afSMarek Behún 
373d4a704afSMarek Behún 	/* expected generation for this device */
374d4a704afSMarek Behún 	__u64 generation;
375d4a704afSMarek Behún 
376d4a704afSMarek Behún 	/*
377d4a704afSMarek Behún 	 * starting byte of this partition on the device,
378d4a704afSMarek Behún 	 * to allow for stripe alignment in the future
379d4a704afSMarek Behún 	 */
380d4a704afSMarek Behún 	__u64 start_offset;
381d4a704afSMarek Behún 
382d4a704afSMarek Behún 	/* grouping information for allocation decisions */
383d4a704afSMarek Behún 	__u32 dev_group;
384d4a704afSMarek Behún 
385d4a704afSMarek Behún 	/* seek speed 0-100 where 100 is fastest */
386d4a704afSMarek Behún 	__u8 seek_speed;
387d4a704afSMarek Behún 
388d4a704afSMarek Behún 	/* bandwidth 0-100 where 100 is fastest */
389d4a704afSMarek Behún 	__u8 bandwidth;
390d4a704afSMarek Behún 
391d4a704afSMarek Behún 	/* btrfs generated uuid for this device */
392d4a704afSMarek Behún 	__u8 uuid[BTRFS_UUID_SIZE];
393d4a704afSMarek Behún 
394d4a704afSMarek Behún 	/* uuid of FS who owns this device */
395d4a704afSMarek Behún 	__u8 fsid[BTRFS_UUID_SIZE];
396d4a704afSMarek Behún } __attribute__ ((__packed__));
397d4a704afSMarek Behún 
398d4a704afSMarek Behún struct btrfs_stripe {
399d4a704afSMarek Behún 	__u64 devid;
400d4a704afSMarek Behún 	__u64 offset;
401d4a704afSMarek Behún 	__u8 dev_uuid[BTRFS_UUID_SIZE];
402d4a704afSMarek Behún } __attribute__ ((__packed__));
403d4a704afSMarek Behún 
404d4a704afSMarek Behún struct btrfs_chunk {
405d4a704afSMarek Behún 	/* size of this chunk in bytes */
406d4a704afSMarek Behún 	__u64 length;
407d4a704afSMarek Behún 
408d4a704afSMarek Behún 	/* objectid of the root referencing this chunk */
409d4a704afSMarek Behún 	__u64 owner;
410d4a704afSMarek Behún 
411d4a704afSMarek Behún 	__u64 stripe_len;
412d4a704afSMarek Behún 	__u64 type;
413d4a704afSMarek Behún 
414d4a704afSMarek Behún 	/* optimal io alignment for this chunk */
415d4a704afSMarek Behún 	__u32 io_align;
416d4a704afSMarek Behún 
417d4a704afSMarek Behún 	/* optimal io width for this chunk */
418d4a704afSMarek Behún 	__u32 io_width;
419d4a704afSMarek Behún 
420d4a704afSMarek Behún 	/* minimal io size for this chunk */
421d4a704afSMarek Behún 	__u32 sector_size;
422d4a704afSMarek Behún 
423d4a704afSMarek Behún 	/* 2^16 stripes is quite a lot, a second limit is the size of a single
424d4a704afSMarek Behún 	 * item in the btree
425d4a704afSMarek Behún 	 */
426d4a704afSMarek Behún 	__u16 num_stripes;
427d4a704afSMarek Behún 
428d4a704afSMarek Behún 	/* sub stripes only matter for raid10 */
429d4a704afSMarek Behún 	__u16 sub_stripes;
430d4a704afSMarek Behún 	struct btrfs_stripe stripe;
431d4a704afSMarek Behún 	/* additional stripes go here */
432d4a704afSMarek Behún } __attribute__ ((__packed__));
433d4a704afSMarek Behún 
434d4a704afSMarek Behún #define BTRFS_FREE_SPACE_EXTENT	1
435d4a704afSMarek Behún #define BTRFS_FREE_SPACE_BITMAP	2
436d4a704afSMarek Behún 
437d4a704afSMarek Behún struct btrfs_free_space_entry {
438d4a704afSMarek Behún 	__u64 offset;
439d4a704afSMarek Behún 	__u64 bytes;
440d4a704afSMarek Behún 	__u8 type;
441d4a704afSMarek Behún } __attribute__ ((__packed__));
442d4a704afSMarek Behún 
443d4a704afSMarek Behún struct btrfs_free_space_header {
444d4a704afSMarek Behún 	struct btrfs_key location;
445d4a704afSMarek Behún 	__u64 generation;
446d4a704afSMarek Behún 	__u64 num_entries;
447d4a704afSMarek Behún 	__u64 num_bitmaps;
448d4a704afSMarek Behún } __attribute__ ((__packed__));
449d4a704afSMarek Behún 
450d4a704afSMarek Behún #define BTRFS_HEADER_FLAG_WRITTEN	(1ULL << 0)
451d4a704afSMarek Behún #define BTRFS_HEADER_FLAG_RELOC		(1ULL << 1)
452d4a704afSMarek Behún 
453d4a704afSMarek Behún /* Super block flags */
454d4a704afSMarek Behún /* Errors detected */
455d4a704afSMarek Behún #define BTRFS_SUPER_FLAG_ERROR		(1ULL << 2)
456d4a704afSMarek Behún 
457d4a704afSMarek Behún #define BTRFS_SUPER_FLAG_SEEDING	(1ULL << 32)
458d4a704afSMarek Behún #define BTRFS_SUPER_FLAG_METADUMP	(1ULL << 33)
459d4a704afSMarek Behún 
460d4a704afSMarek Behún 
461d4a704afSMarek Behún /*
462d4a704afSMarek Behún  * items in the extent btree are used to record the objectid of the
463d4a704afSMarek Behún  * owner of the block and the number of references
464d4a704afSMarek Behún  */
465d4a704afSMarek Behún 
466d4a704afSMarek Behún struct btrfs_extent_item {
467d4a704afSMarek Behún 	__u64 refs;
468d4a704afSMarek Behún 	__u64 generation;
469d4a704afSMarek Behún 	__u64 flags;
470d4a704afSMarek Behún } __attribute__ ((__packed__));
471d4a704afSMarek Behún 
472d4a704afSMarek Behún 
473d4a704afSMarek Behún #define BTRFS_EXTENT_FLAG_DATA		(1ULL << 0)
474d4a704afSMarek Behún #define BTRFS_EXTENT_FLAG_TREE_BLOCK	(1ULL << 1)
475d4a704afSMarek Behún 
476d4a704afSMarek Behún /* following flags only apply to tree blocks */
477d4a704afSMarek Behún 
478d4a704afSMarek Behún /* use full backrefs for extent pointers in the block */
479d4a704afSMarek Behún #define BTRFS_BLOCK_FLAG_FULL_BACKREF	(1ULL << 8)
480d4a704afSMarek Behún 
481d4a704afSMarek Behún /*
482d4a704afSMarek Behún  * this flag is only used internally by scrub and may be changed at any time
483d4a704afSMarek Behún  * it is only declared here to avoid collisions
484d4a704afSMarek Behún  */
485d4a704afSMarek Behún #define BTRFS_EXTENT_FLAG_SUPER		(1ULL << 48)
486d4a704afSMarek Behún 
487d4a704afSMarek Behún struct btrfs_tree_block_info {
488d4a704afSMarek Behún 	struct btrfs_key key;
489d4a704afSMarek Behún 	__u8 level;
490d4a704afSMarek Behún } __attribute__ ((__packed__));
491d4a704afSMarek Behún 
492d4a704afSMarek Behún struct btrfs_extent_data_ref {
493d4a704afSMarek Behún 	__u64 root;
494d4a704afSMarek Behún 	__u64 objectid;
495d4a704afSMarek Behún 	__u64 offset;
496d4a704afSMarek Behún 	__u32 count;
497d4a704afSMarek Behún } __attribute__ ((__packed__));
498d4a704afSMarek Behún 
499d4a704afSMarek Behún struct btrfs_shared_data_ref {
500d4a704afSMarek Behún 	__u32 count;
501d4a704afSMarek Behún } __attribute__ ((__packed__));
502d4a704afSMarek Behún 
503d4a704afSMarek Behún struct btrfs_extent_inline_ref {
504d4a704afSMarek Behún 	__u8 type;
505d4a704afSMarek Behún 	__u64 offset;
506d4a704afSMarek Behún } __attribute__ ((__packed__));
507d4a704afSMarek Behún 
508d4a704afSMarek Behún /* dev extents record free space on individual devices.  The owner
509d4a704afSMarek Behún  * field points back to the chunk allocation mapping tree that allocated
510d4a704afSMarek Behún  * the extent.  The chunk tree uuid field is a way to double check the owner
511d4a704afSMarek Behún  */
512d4a704afSMarek Behún struct btrfs_dev_extent {
513d4a704afSMarek Behún 	__u64 chunk_tree;
514d4a704afSMarek Behún 	__u64 chunk_objectid;
515d4a704afSMarek Behún 	__u64 chunk_offset;
516d4a704afSMarek Behún 	__u64 length;
517d4a704afSMarek Behún 	__u8 chunk_tree_uuid[BTRFS_UUID_SIZE];
518d4a704afSMarek Behún } __attribute__ ((__packed__));
519d4a704afSMarek Behún 
520d4a704afSMarek Behún struct btrfs_inode_ref {
521d4a704afSMarek Behún 	__u64 index;
522d4a704afSMarek Behún 	__u16 name_len;
523d4a704afSMarek Behún 	/* name goes here */
524d4a704afSMarek Behún } __attribute__ ((__packed__));
525d4a704afSMarek Behún 
526d4a704afSMarek Behún struct btrfs_inode_extref {
527d4a704afSMarek Behún 	__u64 parent_objectid;
528d4a704afSMarek Behún 	__u64 index;
529d4a704afSMarek Behún 	__u16 name_len;
530d4a704afSMarek Behún 	__u8   name[0];
531d4a704afSMarek Behún 	/* name goes here */
532d4a704afSMarek Behún } __attribute__ ((__packed__));
533d4a704afSMarek Behún 
534d4a704afSMarek Behún struct btrfs_timespec {
535d4a704afSMarek Behún 	__u64 sec;
536d4a704afSMarek Behún 	__u32 nsec;
537d4a704afSMarek Behún } __attribute__ ((__packed__));
538d4a704afSMarek Behún 
539d4a704afSMarek Behún struct btrfs_inode_item {
540d4a704afSMarek Behún 	/* nfs style generation number */
541d4a704afSMarek Behún 	__u64 generation;
542d4a704afSMarek Behún 	/* transid that last touched this inode */
543d4a704afSMarek Behún 	__u64 transid;
544d4a704afSMarek Behún 	__u64 size;
545d4a704afSMarek Behún 	__u64 nbytes;
546d4a704afSMarek Behún 	__u64 block_group;
547d4a704afSMarek Behún 	__u32 nlink;
548d4a704afSMarek Behún 	__u32 uid;
549d4a704afSMarek Behún 	__u32 gid;
550d4a704afSMarek Behún 	__u32 mode;
551d4a704afSMarek Behún 	__u64 rdev;
552d4a704afSMarek Behún 	__u64 flags;
553d4a704afSMarek Behún 
554d4a704afSMarek Behún 	/* modification sequence number for NFS */
555d4a704afSMarek Behún 	__u64 sequence;
556d4a704afSMarek Behún 
557d4a704afSMarek Behún 	/*
558d4a704afSMarek Behún 	 * a little future expansion, for more than this we can
559d4a704afSMarek Behún 	 * just grow the inode item and version it
560d4a704afSMarek Behún 	 */
561d4a704afSMarek Behún 	__u64 reserved[4];
562d4a704afSMarek Behún 	struct btrfs_timespec atime;
563d4a704afSMarek Behún 	struct btrfs_timespec ctime;
564d4a704afSMarek Behún 	struct btrfs_timespec mtime;
565d4a704afSMarek Behún 	struct btrfs_timespec otime;
566d4a704afSMarek Behún } __attribute__ ((__packed__));
567d4a704afSMarek Behún 
568d4a704afSMarek Behún struct btrfs_dir_log_item {
569d4a704afSMarek Behún 	__u64 end;
570d4a704afSMarek Behún } __attribute__ ((__packed__));
571d4a704afSMarek Behún 
572d4a704afSMarek Behún struct btrfs_dir_item {
573d4a704afSMarek Behún 	struct btrfs_key location;
574d4a704afSMarek Behún 	__u64 transid;
575d4a704afSMarek Behún 	__u16 data_len;
576d4a704afSMarek Behún 	__u16 name_len;
577d4a704afSMarek Behún 	__u8 type;
578d4a704afSMarek Behún } __attribute__ ((__packed__));
579d4a704afSMarek Behún 
580d4a704afSMarek Behún #define BTRFS_ROOT_SUBVOL_RDONLY	(1ULL << 0)
581d4a704afSMarek Behún 
582d4a704afSMarek Behún /*
583d4a704afSMarek Behún  * Internal in-memory flag that a subvolume has been marked for deletion but
584d4a704afSMarek Behún  * still visible as a directory
585d4a704afSMarek Behún  */
586d4a704afSMarek Behún #define BTRFS_ROOT_SUBVOL_DEAD		(1ULL << 48)
587d4a704afSMarek Behún 
588d4a704afSMarek Behún struct btrfs_root_item {
589d4a704afSMarek Behún 	struct btrfs_inode_item inode;
590d4a704afSMarek Behún 	__u64 generation;
591d4a704afSMarek Behún 	__u64 root_dirid;
592d4a704afSMarek Behún 	__u64 bytenr;
593d4a704afSMarek Behún 	__u64 byte_limit;
594d4a704afSMarek Behún 	__u64 bytes_used;
595d4a704afSMarek Behún 	__u64 last_snapshot;
596d4a704afSMarek Behún 	__u64 flags;
597d4a704afSMarek Behún 	__u32 refs;
598d4a704afSMarek Behún 	struct btrfs_key drop_progress;
599d4a704afSMarek Behún 	__u8 drop_level;
600d4a704afSMarek Behún 	__u8 level;
601d4a704afSMarek Behún 
602d4a704afSMarek Behún 	/*
603d4a704afSMarek Behún 	 * The following fields appear after subvol_uuids+subvol_times
604d4a704afSMarek Behún 	 * were introduced.
605d4a704afSMarek Behún 	 */
606d4a704afSMarek Behún 
607d4a704afSMarek Behún 	/*
608d4a704afSMarek Behún 	 * This generation number is used to test if the new fields are valid
609d4a704afSMarek Behún 	 * and up to date while reading the root item. Every time the root item
610d4a704afSMarek Behún 	 * is written out, the "generation" field is copied into this field. If
611d4a704afSMarek Behún 	 * anyone ever mounted the fs with an older kernel, we will have
612d4a704afSMarek Behún 	 * mismatching generation values here and thus must invalidate the
613d4a704afSMarek Behún 	 * new fields. See btrfs_update_root and btrfs_find_last_root for
614d4a704afSMarek Behún 	 * details.
615d4a704afSMarek Behún 	 * the offset of generation_v2 is also used as the start for the memset
616d4a704afSMarek Behún 	 * when invalidating the fields.
617d4a704afSMarek Behún 	 */
618d4a704afSMarek Behún 	__u64 generation_v2;
619d4a704afSMarek Behún 	__u8 uuid[BTRFS_UUID_SIZE];
620d4a704afSMarek Behún 	__u8 parent_uuid[BTRFS_UUID_SIZE];
621d4a704afSMarek Behún 	__u8 received_uuid[BTRFS_UUID_SIZE];
622d4a704afSMarek Behún 	__u64 ctransid; /* updated when an inode changes */
623d4a704afSMarek Behún 	__u64 otransid; /* trans when created */
624d4a704afSMarek Behún 	__u64 stransid; /* trans when sent. non-zero for received subvol */
625d4a704afSMarek Behún 	__u64 rtransid; /* trans when received. non-zero for received subvol */
626d4a704afSMarek Behún 	struct btrfs_timespec ctime;
627d4a704afSMarek Behún 	struct btrfs_timespec otime;
628d4a704afSMarek Behún 	struct btrfs_timespec stime;
629d4a704afSMarek Behún 	struct btrfs_timespec rtime;
630d4a704afSMarek Behún 	__u64 reserved[8]; /* for future */
631d4a704afSMarek Behún } __attribute__ ((__packed__));
632d4a704afSMarek Behún 
633d4a704afSMarek Behún /*
634d4a704afSMarek Behún  * this is used for both forward and backward root refs
635d4a704afSMarek Behún  */
636d4a704afSMarek Behún struct btrfs_root_ref {
637d4a704afSMarek Behún 	__u64 dirid;
638d4a704afSMarek Behún 	__u64 sequence;
639d4a704afSMarek Behún 	__u16 name_len;
640d4a704afSMarek Behún } __attribute__ ((__packed__));
641d4a704afSMarek Behún 
642d4a704afSMarek Behún #define BTRFS_FILE_EXTENT_INLINE 0
643d4a704afSMarek Behún #define BTRFS_FILE_EXTENT_REG 1
644d4a704afSMarek Behún #define BTRFS_FILE_EXTENT_PREALLOC 2
645d4a704afSMarek Behún 
646d4a704afSMarek Behún enum btrfs_compression_type {
647d4a704afSMarek Behún 	BTRFS_COMPRESS_NONE  = 0,
648d4a704afSMarek Behún 	BTRFS_COMPRESS_ZLIB  = 1,
649d4a704afSMarek Behún 	BTRFS_COMPRESS_LZO   = 2,
650d4a704afSMarek Behún 	BTRFS_COMPRESS_TYPES = 2,
651d4a704afSMarek Behún 	BTRFS_COMPRESS_LAST  = 3,
652d4a704afSMarek Behún };
653d4a704afSMarek Behún 
654d4a704afSMarek Behún struct btrfs_file_extent_item {
655d4a704afSMarek Behún 	/*
656d4a704afSMarek Behún 	 * transaction id that created this extent
657d4a704afSMarek Behún 	 */
658d4a704afSMarek Behún 	__u64 generation;
659d4a704afSMarek Behún 	/*
660d4a704afSMarek Behún 	 * max number of bytes to hold this extent in ram
661d4a704afSMarek Behún 	 * when we split a compressed extent we can't know how big
662d4a704afSMarek Behún 	 * each of the resulting pieces will be.  So, this is
663d4a704afSMarek Behún 	 * an upper limit on the size of the extent in ram instead of
664d4a704afSMarek Behún 	 * an exact limit.
665d4a704afSMarek Behún 	 */
666d4a704afSMarek Behún 	__u64 ram_bytes;
667d4a704afSMarek Behún 
668d4a704afSMarek Behún 	/*
669d4a704afSMarek Behún 	 * 32 bits for the various ways we might encode the data,
670d4a704afSMarek Behún 	 * including compression and encryption.  If any of these
671d4a704afSMarek Behún 	 * are set to something a given disk format doesn't understand
672d4a704afSMarek Behún 	 * it is treated like an incompat flag for reading and writing,
673d4a704afSMarek Behún 	 * but not for stat.
674d4a704afSMarek Behún 	 */
675d4a704afSMarek Behún 	__u8 compression;
676d4a704afSMarek Behún 	__u8 encryption;
677d4a704afSMarek Behún 	__u16 other_encoding; /* spare for later use */
678d4a704afSMarek Behún 
679d4a704afSMarek Behún 	/* are we inline data or a real extent? */
680d4a704afSMarek Behún 	__u8 type;
681d4a704afSMarek Behún 
682d4a704afSMarek Behún 	/*
683d4a704afSMarek Behún 	 * disk space consumed by the extent, checksum blocks are included
684d4a704afSMarek Behún 	 * in these numbers
685d4a704afSMarek Behún 	 *
686d4a704afSMarek Behún 	 * At this offset in the structure, the inline extent data start.
687d4a704afSMarek Behún 	 */
688d4a704afSMarek Behún 	__u64 disk_bytenr;
689d4a704afSMarek Behún 	__u64 disk_num_bytes;
690d4a704afSMarek Behún 	/*
691d4a704afSMarek Behún 	 * the logical offset in file blocks (no csums)
692d4a704afSMarek Behún 	 * this extent record is for.  This allows a file extent to point
693d4a704afSMarek Behún 	 * into the middle of an existing extent on disk, sharing it
694d4a704afSMarek Behún 	 * between two snapshots (useful if some bytes in the middle of the
695d4a704afSMarek Behún 	 * extent have changed
696d4a704afSMarek Behún 	 */
697d4a704afSMarek Behún 	__u64 offset;
698d4a704afSMarek Behún 	/*
699d4a704afSMarek Behún 	 * the logical number of file blocks (no csums included).  This
700d4a704afSMarek Behún 	 * always reflects the size uncompressed and without encoding.
701d4a704afSMarek Behún 	 */
702d4a704afSMarek Behún 	__u64 num_bytes;
703d4a704afSMarek Behún 
704d4a704afSMarek Behún } __attribute__ ((__packed__));
705d4a704afSMarek Behún 
706d4a704afSMarek Behún struct btrfs_csum_item {
707d4a704afSMarek Behún 	__u8 csum;
708d4a704afSMarek Behún } __attribute__ ((__packed__));
709d4a704afSMarek Behún 
710d4a704afSMarek Behún /* different types of block groups (and chunks) */
711d4a704afSMarek Behún #define BTRFS_BLOCK_GROUP_DATA		(1ULL << 0)
712d4a704afSMarek Behún #define BTRFS_BLOCK_GROUP_SYSTEM	(1ULL << 1)
713d4a704afSMarek Behún #define BTRFS_BLOCK_GROUP_METADATA	(1ULL << 2)
714d4a704afSMarek Behún #define BTRFS_BLOCK_GROUP_RAID0		(1ULL << 3)
715d4a704afSMarek Behún #define BTRFS_BLOCK_GROUP_RAID1		(1ULL << 4)
716d4a704afSMarek Behún #define BTRFS_BLOCK_GROUP_DUP		(1ULL << 5)
717d4a704afSMarek Behún #define BTRFS_BLOCK_GROUP_RAID10	(1ULL << 6)
718d4a704afSMarek Behún #define BTRFS_BLOCK_GROUP_RAID5         (1ULL << 7)
719d4a704afSMarek Behún #define BTRFS_BLOCK_GROUP_RAID6         (1ULL << 8)
720d4a704afSMarek Behún #define BTRFS_BLOCK_GROUP_RESERVED	(BTRFS_AVAIL_ALLOC_BIT_SINGLE | \
721d4a704afSMarek Behún 					 BTRFS_SPACE_INFO_GLOBAL_RSV)
722d4a704afSMarek Behún 
723d4a704afSMarek Behún enum btrfs_raid_types {
724d4a704afSMarek Behún 	BTRFS_RAID_RAID10,
725d4a704afSMarek Behún 	BTRFS_RAID_RAID1,
726d4a704afSMarek Behún 	BTRFS_RAID_DUP,
727d4a704afSMarek Behún 	BTRFS_RAID_RAID0,
728d4a704afSMarek Behún 	BTRFS_RAID_SINGLE,
729d4a704afSMarek Behún 	BTRFS_RAID_RAID5,
730d4a704afSMarek Behún 	BTRFS_RAID_RAID6,
731d4a704afSMarek Behún 	BTRFS_NR_RAID_TYPES
732d4a704afSMarek Behún };
733d4a704afSMarek Behún 
734d4a704afSMarek Behún #define BTRFS_BLOCK_GROUP_TYPE_MASK	(BTRFS_BLOCK_GROUP_DATA |    \
735d4a704afSMarek Behún 					 BTRFS_BLOCK_GROUP_SYSTEM |  \
736d4a704afSMarek Behún 					 BTRFS_BLOCK_GROUP_METADATA)
737d4a704afSMarek Behún 
738d4a704afSMarek Behún #define BTRFS_BLOCK_GROUP_PROFILE_MASK	(BTRFS_BLOCK_GROUP_RAID0 |   \
739d4a704afSMarek Behún 					 BTRFS_BLOCK_GROUP_RAID1 |   \
740d4a704afSMarek Behún 					 BTRFS_BLOCK_GROUP_RAID5 |   \
741d4a704afSMarek Behún 					 BTRFS_BLOCK_GROUP_RAID6 |   \
742d4a704afSMarek Behún 					 BTRFS_BLOCK_GROUP_DUP |     \
743d4a704afSMarek Behún 					 BTRFS_BLOCK_GROUP_RAID10)
744d4a704afSMarek Behún #define BTRFS_BLOCK_GROUP_RAID56_MASK	(BTRFS_BLOCK_GROUP_RAID5 |   \
745d4a704afSMarek Behún 					 BTRFS_BLOCK_GROUP_RAID6)
746d4a704afSMarek Behún 
747d4a704afSMarek Behún /*
748d4a704afSMarek Behún  * We need a bit for restriper to be able to tell when chunks of type
749d4a704afSMarek Behún  * SINGLE are available.  This "extended" profile format is used in
750d4a704afSMarek Behún  * fs_info->avail_*_alloc_bits (in-memory) and balance item fields
751d4a704afSMarek Behún  * (on-disk).  The corresponding on-disk bit in chunk.type is reserved
752d4a704afSMarek Behún  * to avoid remappings between two formats in future.
753d4a704afSMarek Behún  */
754d4a704afSMarek Behún #define BTRFS_AVAIL_ALLOC_BIT_SINGLE	(1ULL << 48)
755d4a704afSMarek Behún 
756d4a704afSMarek Behún /*
757d4a704afSMarek Behún  * A fake block group type that is used to communicate global block reserve
758d4a704afSMarek Behún  * size to userspace via the SPACE_INFO ioctl.
759d4a704afSMarek Behún  */
760d4a704afSMarek Behún #define BTRFS_SPACE_INFO_GLOBAL_RSV	(1ULL << 49)
761d4a704afSMarek Behún 
762d4a704afSMarek Behún #define BTRFS_EXTENDED_PROFILE_MASK	(BTRFS_BLOCK_GROUP_PROFILE_MASK | \
763d4a704afSMarek Behún 					 BTRFS_AVAIL_ALLOC_BIT_SINGLE)
764d4a704afSMarek Behún 
765d4a704afSMarek Behún #endif /* __BTRFS_BTRFS_TREE_H__ */
766