• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 #ifndef _BTRFS_H_
2 #define _BTRFS_H_
3 
4 #include <asm/types.h>
5 #include <linux/ioctl.h>
6 
7 #define BTRFS_SUPER_MAGIC 0x9123683E
8 #define BTRFS_SUPER_INFO_OFFSET (64 * 1024)
9 #define BTRFS_SUPER_INFO_SIZE 4096
10 #define BTRFS_MAGIC "_BHRfS_M"
11 #define BTRFS_MAGIC_L 8
12 #define BTRFS_CSUM_SIZE 32
13 #define BTRFS_FSID_SIZE 16
14 #define BTRFS_UUID_SIZE 16
15 
16 /* Fixed areas reserved for the boot loader */
17 #define BTRFS_BOOT_AREA_A_OFFSET	0
18 #define BTRFS_BOOT_AREA_A_SIZE		BTRFS_SUPER_INFO_OFFSET
19 #define BTRFS_BOOT_AREA_B_OFFSET	(256 * 1024)
20 #define BTRFS_BOOT_AREA_B_SIZE		((1024-256) * 1024)
21 
22 typedef __u64 u64;
23 typedef __u32 u32;
24 typedef __u16 u16;
25 typedef __u8 u8;
26 typedef u64 __le64;
27 typedef u16 __le16;
28 
29 #define BTRFS_ROOT_BACKREF_KEY  144
30 #define BTRFS_ROOT_TREE_DIR_OBJECTID 6ULL
31 #define BTRFS_DIR_ITEM_KEY      84
32 
33 /*
34  *  * this is used for both forward and backward root refs
35  *   */
36 struct btrfs_root_ref {
37         __le64 dirid;
38         __le64 sequence;
39         __le16 name_len;
40 } __attribute__ ((__packed__));
41 
42 struct btrfs_disk_key {
43         __le64 objectid;
44         u8 type;
45         __le64 offset;
46 } __attribute__ ((__packed__));
47 
48 struct btrfs_dir_item {
49         struct btrfs_disk_key location;
50         __le64 transid;
51         __le16 data_len;
52         __le16 name_len;
53         u8 type;
54 } __attribute__ ((__packed__));
55 
56 struct btrfs_super_block {
57         uint8_t csum[32];
58         uint8_t fsid[16];
59         uint64_t bytenr;
60         uint64_t flags;
61         uint8_t magic[8];
62         uint64_t generation;
63         uint64_t root;
64         uint64_t chunk_root;
65         uint64_t log_root;
66         uint64_t log_root_transid;
67         uint64_t total_bytes;
68         uint64_t bytes_used;
69         uint64_t root_dir_objectid;
70         uint64_t num_devices;
71         uint32_t sectorsize;
72         uint32_t nodesize;
73         uint32_t leafsize;
74         uint32_t stripesize;
75         uint32_t sys_chunk_array_size;
76         uint64_t chunk_root_generation;
77         uint64_t compat_flags;
78         uint64_t compat_ro_flags;
79         uint64_t incompat_flags;
80         uint16_t csum_type;
81         uint8_t root_level;
82         uint8_t chunk_root_level;
83         uint8_t log_root_level;
84         struct btrfs_dev_item {
85                 uint64_t devid;
86                 uint64_t total_bytes;
87                 uint64_t bytes_used;
88                 uint32_t io_align;
89                 uint32_t io_width;
90                 uint32_t sector_size;
91                 uint64_t type;
92                 uint64_t generation;
93                 uint64_t start_offset;
94                 uint32_t dev_group;
95                 uint8_t seek_speed;
96                 uint8_t bandwidth;
97                 uint8_t uuid[16];
98                 uint8_t fsid[16];
99         } __attribute__ ((__packed__)) dev_item;
100         uint8_t label[256];
101 } __attribute__ ((__packed__));
102 
103 #define BTRFS_IOCTL_MAGIC 0x94
104 #define BTRFS_VOL_NAME_MAX 255
105 #define BTRFS_PATH_NAME_MAX 4087
106 
107 struct btrfs_ioctl_vol_args {
108 	__s64 fd;
109 	char name[BTRFS_PATH_NAME_MAX + 1];
110 };
111 
112 struct btrfs_ioctl_search_key {
113 	/* which root are we searching.  0 is the tree of tree roots */
114 	__u64 tree_id;
115 
116 	/* keys returned will be >= min and <= max */
117 	__u64 min_objectid;
118 	__u64 max_objectid;
119 
120 	/* keys returned will be >= min and <= max */
121 	__u64 min_offset;
122 	__u64 max_offset;
123 
124 	/* max and min transids to search for */
125 	__u64 min_transid;
126 	__u64 max_transid;
127 
128 	/* keys returned will be >= min and <= max */
129 	__u32 min_type;
130 	__u32 max_type;
131 
132 	/*
133 	 * how many items did userland ask for, and how many are we
134 	 * returning
135 	 */
136 	__u32 nr_items;
137 
138 	/* align to 64 bits */
139 	__u32 unused;
140 
141 	/* some extra for later */
142 	__u64 unused1;
143 	__u64 unused2;
144 	__u64 unused3;
145 	__u64 unused4;
146 };
147 
148 struct btrfs_ioctl_search_header {
149 	__u64 transid;
150 	__u64 objectid;
151 	__u64 offset;
152 	__u32 type;
153 	__u32 len;
154 } __attribute__((may_alias));
155 
156 #define BTRFS_DEVICE_PATH_NAME_MAX 1024
157 struct btrfs_ioctl_dev_info_args {
158 	__u64 devid;				/* in/out */
159 	__u8 uuid[BTRFS_UUID_SIZE];		/* in/out */
160 	__u64 bytes_used;			/* out */
161 	__u64 total_bytes;			/* out */
162 	__u64 unused[379];			/* pad to 4k */
163 	__u8 path[BTRFS_DEVICE_PATH_NAME_MAX];	/* out */
164 };
165 
166 struct btrfs_ioctl_fs_info_args {
167 	__u64 max_id;				/* out */
168 	__u64 num_devices;			/* out */
169 	__u8 fsid[BTRFS_FSID_SIZE];		/* out */
170 	__u64 reserved[124];			/* pad to 1k */
171 };
172 
173 #define BTRFS_SEARCH_ARGS_BUFSIZE (4096 - sizeof(struct btrfs_ioctl_search_key))
174 /*
175  * the buf is an array of search headers where
176  * each header is followed by the actual item
177  * the type field is expanded to 32 bits for alignment
178  */
179 struct btrfs_ioctl_search_args {
180 	struct btrfs_ioctl_search_key key;
181 	char buf[BTRFS_SEARCH_ARGS_BUFSIZE];
182 };
183 
184 #define BTRFS_IOC_TREE_SEARCH _IOWR(BTRFS_IOCTL_MAGIC, 17, \
185                                    struct btrfs_ioctl_search_args)
186 #define BTRFS_IOC_DEV_INFO _IOWR(BTRFS_IOCTL_MAGIC, 30, \
187 				 struct btrfs_ioctl_dev_info_args)
188 #define BTRFS_IOC_FS_INFO _IOR(BTRFS_IOCTL_MAGIC, 31, \
189 			       struct btrfs_ioctl_fs_info_args)
190 
191 #endif
192