• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * This header was generated from the Linux kernel headers by update_headers.py,
3  * to provide necessary information from kernel to userspace, such as constants,
4  * structures, and macros, and thus, contains no copyrightable information.
5  */
6 #ifndef _UAPI_LINUX_BTRFS_H
7 #define _UAPI_LINUX_BTRFS_H
8 #include <linux/types.h>
9 #include <linux/ioctl.h>
10 #define BTRFS_IOCTL_MAGIC 0x94
11 #define BTRFS_VOL_NAME_MAX 255
12 #define BTRFS_LABEL_SIZE 256
13 #define BTRFS_PATH_NAME_MAX 4087
14 struct btrfs_ioctl_vol_args {
15 	__s64 fd;
16 	char name[BTRFS_PATH_NAME_MAX + 1];
17 };
18 #define BTRFS_DEVICE_PATH_NAME_MAX	1024
19 #define BTRFS_SUBVOL_NAME_MAX 		4039
20 #define BTRFS_SUBVOL_CREATE_ASYNC	(1ULL << 0)
21 #define BTRFS_SUBVOL_RDONLY		(1ULL << 1)
22 #define BTRFS_SUBVOL_QGROUP_INHERIT	(1ULL << 2)
23 #define BTRFS_DEVICE_SPEC_BY_ID		(1ULL << 3)
24 #define BTRFS_VOL_ARG_V2_FLAGS_SUPPORTED		\
25 			(BTRFS_SUBVOL_CREATE_ASYNC |	\
26 			BTRFS_SUBVOL_RDONLY |		\
27 			BTRFS_SUBVOL_QGROUP_INHERIT |	\
28 			BTRFS_DEVICE_SPEC_BY_ID)
29 #define BTRFS_FSID_SIZE 16
30 #define BTRFS_UUID_SIZE 16
31 #define BTRFS_UUID_UNPARSED_SIZE	37
32 #define BTRFS_QGROUP_LIMIT_MAX_RFER	(1ULL << 0)
33 #define BTRFS_QGROUP_LIMIT_MAX_EXCL	(1ULL << 1)
34 #define BTRFS_QGROUP_LIMIT_RSV_RFER	(1ULL << 2)
35 #define BTRFS_QGROUP_LIMIT_RSV_EXCL	(1ULL << 3)
36 #define BTRFS_QGROUP_LIMIT_RFER_CMPR	(1ULL << 4)
37 #define BTRFS_QGROUP_LIMIT_EXCL_CMPR	(1ULL << 5)
38 struct btrfs_qgroup_limit {
39 	__u64	flags;
40 	__u64	max_rfer;
41 	__u64	max_excl;
42 	__u64	rsv_rfer;
43 	__u64	rsv_excl;
44 };
45 #define BTRFS_QGROUP_INHERIT_SET_LIMITS	(1ULL << 0)
46 struct btrfs_qgroup_inherit {
47 	__u64	flags;
48 	__u64	num_qgroups;
49 	__u64	num_ref_copies;
50 	__u64	num_excl_copies;
51 	struct btrfs_qgroup_limit lim;
52 	__u64	qgroups[0];
53 };
54 struct btrfs_ioctl_qgroup_limit_args {
55 	__u64	qgroupid;
56 	struct btrfs_qgroup_limit lim;
57 };
58 struct btrfs_ioctl_vol_args_v2 {
59 	__s64 fd;
60 	__u64 transid;
61 	__u64 flags;
62 	union {
63 		struct {
64 			__u64 size;
65 			struct btrfs_qgroup_inherit __user *qgroup_inherit;
66 		};
67 		__u64 unused[4];
68 	};
69 	union {
70 		char name[BTRFS_SUBVOL_NAME_MAX + 1];
71 		__u64 devid;
72 	};
73 };
74 struct btrfs_scrub_progress {
75 	__u64 data_extents_scrubbed;
76 	__u64 tree_extents_scrubbed;
77 	__u64 data_bytes_scrubbed;
78 	__u64 tree_bytes_scrubbed;
79 	__u64 read_errors;
80 	__u64 csum_errors;
81 	__u64 verify_errors;
82 	__u64 no_csum;
83 	__u64 csum_discards;
84 	__u64 super_errors;
85 	__u64 malloc_errors;
86 	__u64 uncorrectable_errors;
87 	__u64 corrected_errors;
88 	__u64 last_physical;
89 	__u64 unverified_errors;
90 };
91 #define BTRFS_SCRUB_READONLY	1
92 struct btrfs_ioctl_scrub_args {
93 	__u64 devid;
94 	__u64 start;
95 	__u64 end;
96 	__u64 flags;
97 	struct btrfs_scrub_progress progress;
98 
99 	__u64 unused[(1024-32-sizeof(struct btrfs_scrub_progress))/8];
100 };
101 #define BTRFS_IOCTL_DEV_REPLACE_CONT_READING_FROM_SRCDEV_MODE_ALWAYS	0
102 #define BTRFS_IOCTL_DEV_REPLACE_CONT_READING_FROM_SRCDEV_MODE_AVOID	1
103 struct btrfs_ioctl_dev_replace_start_params {
104 	__u64 srcdevid;
105 	__u64 cont_reading_from_srcdev_mode;
106 	__u8 srcdev_name[BTRFS_DEVICE_PATH_NAME_MAX + 1];
107 	__u8 tgtdev_name[BTRFS_DEVICE_PATH_NAME_MAX + 1];
108 };
109 #define BTRFS_IOCTL_DEV_REPLACE_STATE_NEVER_STARTED	0
110 #define BTRFS_IOCTL_DEV_REPLACE_STATE_STARTED		1
111 #define BTRFS_IOCTL_DEV_REPLACE_STATE_FINISHED		2
112 #define BTRFS_IOCTL_DEV_REPLACE_STATE_CANCELED		3
113 #define BTRFS_IOCTL_DEV_REPLACE_STATE_SUSPENDED		4
114 struct btrfs_ioctl_dev_replace_status_params {
115 	__u64 replace_state;
116 	__u64 progress_1000;
117 	__u64 time_started;
118 	__u64 time_stopped;
119 	__u64 num_write_errors;
120 	__u64 num_uncorrectable_read_errors;
121 };
122 #define BTRFS_IOCTL_DEV_REPLACE_CMD_START			0
123 #define BTRFS_IOCTL_DEV_REPLACE_CMD_STATUS			1
124 #define BTRFS_IOCTL_DEV_REPLACE_CMD_CANCEL			2
125 #define BTRFS_IOCTL_DEV_REPLACE_RESULT_NO_ERROR			0
126 #define BTRFS_IOCTL_DEV_REPLACE_RESULT_NOT_STARTED		1
127 #define BTRFS_IOCTL_DEV_REPLACE_RESULT_ALREADY_STARTED		2
128 #define BTRFS_IOCTL_DEV_REPLACE_RESULT_SCRUB_INPROGRESS		3
129 struct btrfs_ioctl_dev_replace_args {
130 	__u64 cmd;
131 	__u64 result;
132 	union {
133 		struct btrfs_ioctl_dev_replace_start_params start;
134 		struct btrfs_ioctl_dev_replace_status_params status;
135 	};
136 	__u64 spare[64];
137 };
138 struct btrfs_ioctl_dev_info_args {
139 	__u64 devid;
140 	__u8 uuid[BTRFS_UUID_SIZE];
141 	__u64 bytes_used;
142 	__u64 total_bytes;
143 	__u64 unused[379];
144 	__u8 path[BTRFS_DEVICE_PATH_NAME_MAX];
145 };
146 struct btrfs_ioctl_fs_info_args {
147 	__u64 max_id;
148 	__u64 num_devices;
149 	__u8 fsid[BTRFS_FSID_SIZE];
150 	__u32 nodesize;
151 	__u32 sectorsize;
152 	__u32 clone_alignment;
153 	__u32 reserved32;
154 	__u64 reserved[122];
155 };
156 #define BTRFS_FEATURE_COMPAT_RO_FREE_SPACE_TREE		(1ULL << 0)
157 #define BTRFS_FEATURE_COMPAT_RO_FREE_SPACE_TREE_VALID	(1ULL << 1)
158 #define BTRFS_FEATURE_INCOMPAT_MIXED_BACKREF	(1ULL << 0)
159 #define BTRFS_FEATURE_INCOMPAT_DEFAULT_SUBVOL	(1ULL << 1)
160 #define BTRFS_FEATURE_INCOMPAT_MIXED_GROUPS	(1ULL << 2)
161 #define BTRFS_FEATURE_INCOMPAT_COMPRESS_LZO	(1ULL << 3)
162 #define BTRFS_FEATURE_INCOMPAT_COMPRESS_ZSTD	(1ULL << 4)
163 #define BTRFS_FEATURE_INCOMPAT_BIG_METADATA	(1ULL << 5)
164 #define BTRFS_FEATURE_INCOMPAT_EXTENDED_IREF	(1ULL << 6)
165 #define BTRFS_FEATURE_INCOMPAT_RAID56		(1ULL << 7)
166 #define BTRFS_FEATURE_INCOMPAT_SKINNY_METADATA	(1ULL << 8)
167 #define BTRFS_FEATURE_INCOMPAT_NO_HOLES		(1ULL << 9)
168 struct btrfs_ioctl_feature_flags {
169 	__u64 compat_flags;
170 	__u64 compat_ro_flags;
171 	__u64 incompat_flags;
172 };
173 #define BTRFS_BALANCE_CTL_PAUSE		1
174 #define BTRFS_BALANCE_CTL_CANCEL	2
175 struct btrfs_balance_args {
176 	__u64 profiles;
177 	union {
178 		__u64 usage;
179 		struct {
180 			__u32 usage_min;
181 			__u32 usage_max;
182 		};
183 	};
184 	__u64 devid;
185 	__u64 pstart;
186 	__u64 pend;
187 	__u64 vstart;
188 	__u64 vend;
189 	__u64 target;
190 	__u64 flags;
191 
192 	union {
193 		__u64 limit;
194 		struct {
195 			__u32 limit_min;
196 			__u32 limit_max;
197 		};
198 	};
199 
200 	__u32 stripes_min;
201 	__u32 stripes_max;
202 	__u64 unused[6];
203 } __attribute__ ((__packed__));
204 struct btrfs_balance_progress {
205 	__u64 expected;
206 	__u64 considered;
207 	__u64 completed;
208 };
209 #define BTRFS_BALANCE_DATA		(1ULL << 0)
210 #define BTRFS_BALANCE_SYSTEM		(1ULL << 1)
211 #define BTRFS_BALANCE_METADATA		(1ULL << 2)
212 #define BTRFS_BALANCE_TYPE_MASK		(BTRFS_BALANCE_DATA |	    \
213 					 BTRFS_BALANCE_SYSTEM |	    \
214 					 BTRFS_BALANCE_METADATA)
215 #define BTRFS_BALANCE_FORCE		(1ULL << 3)
216 #define BTRFS_BALANCE_RESUME		(1ULL << 4)
217 #define BTRFS_BALANCE_ARGS_PROFILES	(1ULL << 0)
218 #define BTRFS_BALANCE_ARGS_USAGE	(1ULL << 1)
219 #define BTRFS_BALANCE_ARGS_DEVID	(1ULL << 2)
220 #define BTRFS_BALANCE_ARGS_DRANGE	(1ULL << 3)
221 #define BTRFS_BALANCE_ARGS_VRANGE	(1ULL << 4)
222 #define BTRFS_BALANCE_ARGS_LIMIT	(1ULL << 5)
223 #define BTRFS_BALANCE_ARGS_LIMIT_RANGE	(1ULL << 6)
224 #define BTRFS_BALANCE_ARGS_STRIPES_RANGE (1ULL << 7)
225 #define BTRFS_BALANCE_ARGS_USAGE_RANGE	(1ULL << 10)
226 #define BTRFS_BALANCE_ARGS_MASK			\
227 	(BTRFS_BALANCE_ARGS_PROFILES |		\
228 	 BTRFS_BALANCE_ARGS_USAGE |		\
229 	 BTRFS_BALANCE_ARGS_DEVID | 		\
230 	 BTRFS_BALANCE_ARGS_DRANGE |		\
231 	 BTRFS_BALANCE_ARGS_VRANGE |		\
232 	 BTRFS_BALANCE_ARGS_LIMIT |		\
233 	 BTRFS_BALANCE_ARGS_LIMIT_RANGE |	\
234 	 BTRFS_BALANCE_ARGS_STRIPES_RANGE |	\
235 	 BTRFS_BALANCE_ARGS_USAGE_RANGE)
236 #define BTRFS_BALANCE_ARGS_CONVERT	(1ULL << 8)
237 #define BTRFS_BALANCE_ARGS_SOFT		(1ULL << 9)
238 #define BTRFS_BALANCE_STATE_RUNNING	(1ULL << 0)
239 #define BTRFS_BALANCE_STATE_PAUSE_REQ	(1ULL << 1)
240 #define BTRFS_BALANCE_STATE_CANCEL_REQ	(1ULL << 2)
241 struct btrfs_ioctl_balance_args {
242 	__u64 flags;
243 	__u64 state;
244 	struct btrfs_balance_args data;
245 	struct btrfs_balance_args meta;
246 	struct btrfs_balance_args sys;
247 	struct btrfs_balance_progress stat;
248 	__u64 unused[72];
249 };
250 #define BTRFS_INO_LOOKUP_PATH_MAX 4080
251 struct btrfs_ioctl_ino_lookup_args {
252 	__u64 treeid;
253 	__u64 objectid;
254 	char name[BTRFS_INO_LOOKUP_PATH_MAX];
255 };
256 #define BTRFS_INO_LOOKUP_USER_PATH_MAX (4080 - BTRFS_VOL_NAME_MAX - 1)
257 struct btrfs_ioctl_ino_lookup_user_args {
258 
259 	__u64 dirid;
260 
261 	__u64 treeid;
262 
263 	char name[BTRFS_VOL_NAME_MAX + 1];
264 
265 	char path[BTRFS_INO_LOOKUP_USER_PATH_MAX];
266 };
267 struct btrfs_ioctl_search_key {
268 
269 	__u64 tree_id;
270 
271 	__u64 min_objectid;
272 	__u64 max_objectid;
273 	__u64 min_offset;
274 	__u64 max_offset;
275 	__u64 min_transid;
276 	__u64 max_transid;
277 	__u32 min_type;
278 	__u32 max_type;
279 
280 	__u32 nr_items;
281 
282 	__u32 unused;
283 
284 	__u64 unused1;
285 	__u64 unused2;
286 	__u64 unused3;
287 	__u64 unused4;
288 };
289 struct btrfs_ioctl_search_header {
290 	__u64 transid;
291 	__u64 objectid;
292 	__u64 offset;
293 	__u32 type;
294 	__u32 len;
295 };
296 #define BTRFS_SEARCH_ARGS_BUFSIZE (4096 - sizeof(struct btrfs_ioctl_search_key))
297 struct btrfs_ioctl_search_args {
298 	struct btrfs_ioctl_search_key key;
299 	char buf[BTRFS_SEARCH_ARGS_BUFSIZE];
300 };
301 struct btrfs_ioctl_search_args_v2 {
302 	struct btrfs_ioctl_search_key key;
303 	__u64 buf_size;
304 	__u64 buf[0];
305 };
306 struct btrfs_ioctl_clone_range_args {
307   __s64 src_fd;
308   __u64 src_offset, src_length;
309   __u64 dest_offset;
310 };
311 #define BTRFS_DEFRAG_RANGE_COMPRESS 1
312 #define BTRFS_DEFRAG_RANGE_START_IO 2
313 struct btrfs_ioctl_defrag_range_args {
314 
315 	__u64 start;
316 
317 	__u64 len;
318 
319 	__u64 flags;
320 
321 	__u32 extent_thresh;
322 
323 	__u32 compress_type;
324 
325 	__u32 unused[4];
326 };
327 #define BTRFS_SAME_DATA_DIFFERS	1
328 struct btrfs_ioctl_same_extent_info {
329 	__s64 fd;
330 	__u64 logical_offset;
331 	__u64 bytes_deduped;
332 
333 	__s32 status;
334 	__u32 reserved;
335 };
336 struct btrfs_ioctl_same_args {
337 	__u64 logical_offset;
338 	__u64 length;
339 	__u16 dest_count;
340 	__u16 reserved1;
341 	__u32 reserved2;
342 	struct btrfs_ioctl_same_extent_info info[0];
343 };
344 struct btrfs_ioctl_space_info {
345 	__u64 flags;
346 	__u64 total_bytes;
347 	__u64 used_bytes;
348 };
349 struct btrfs_ioctl_space_args {
350 	__u64 space_slots;
351 	__u64 total_spaces;
352 	struct btrfs_ioctl_space_info spaces[0];
353 };
354 struct btrfs_data_container {
355 	__u32	bytes_left;
356 	__u32	bytes_missing;
357 	__u32	elem_cnt;
358 	__u32	elem_missed;
359 	__u64	val[0];
360 };
361 struct btrfs_ioctl_ino_path_args {
362 	__u64				inum;
363 	__u64				size;
364 	__u64				reserved[4];
365 
366 	__u64				fspath;
367 };
368 struct btrfs_ioctl_logical_ino_args {
369 	__u64				logical;
370 	__u64				size;
371 	__u64				reserved[3];
372 	__u64				flags;
373 
374 	__u64				inodes;
375 };
376 #define BTRFS_LOGICAL_INO_ARGS_IGNORE_OFFSET	(1ULL << 0)
377 enum btrfs_dev_stat_values {
378 
379 	BTRFS_DEV_STAT_WRITE_ERRS,
380 	BTRFS_DEV_STAT_READ_ERRS,
381 	BTRFS_DEV_STAT_FLUSH_ERRS,
382 
383 	BTRFS_DEV_STAT_CORRUPTION_ERRS,
384 	BTRFS_DEV_STAT_GENERATION_ERRS,
385 	BTRFS_DEV_STAT_VALUES_MAX
386 };
387 #define	BTRFS_DEV_STATS_RESET		(1ULL << 0)
388 struct btrfs_ioctl_get_dev_stats {
389 	__u64 devid;
390 	__u64 nr_items;
391 	__u64 flags;
392 
393 	__u64 values[BTRFS_DEV_STAT_VALUES_MAX];
394 	__u64 unused[128 - 2 - BTRFS_DEV_STAT_VALUES_MAX];
395 };
396 #define BTRFS_QUOTA_CTL_ENABLE	1
397 #define BTRFS_QUOTA_CTL_DISABLE	2
398 #define BTRFS_QUOTA_CTL_RESCAN__NOTUSED	3
399 struct btrfs_ioctl_quota_ctl_args {
400 	__u64 cmd;
401 	__u64 status;
402 };
403 struct btrfs_ioctl_quota_rescan_args {
404 	__u64	flags;
405 	__u64   progress;
406 	__u64   reserved[6];
407 };
408 struct btrfs_ioctl_qgroup_assign_args {
409 	__u64 assign;
410 	__u64 src;
411 	__u64 dst;
412 };
413 struct btrfs_ioctl_qgroup_create_args {
414 	__u64 create;
415 	__u64 qgroupid;
416 };
417 struct btrfs_ioctl_timespec {
418 	__u64 sec;
419 	__u32 nsec;
420 };
421 struct btrfs_ioctl_received_subvol_args {
422 	char	uuid[BTRFS_UUID_SIZE];
423 	__u64	stransid;
424 	__u64	rtransid;
425 	struct btrfs_ioctl_timespec stime;
426 	struct btrfs_ioctl_timespec rtime;
427 	__u64	flags;
428 	__u64	reserved[16];
429 };
430 #define BTRFS_SEND_FLAG_NO_FILE_DATA		0x1
431 #define BTRFS_SEND_FLAG_OMIT_STREAM_HEADER	0x2
432 #define BTRFS_SEND_FLAG_OMIT_END_CMD		0x4
433 #define BTRFS_SEND_FLAG_MASK \
434 	(BTRFS_SEND_FLAG_NO_FILE_DATA | \
435 	 BTRFS_SEND_FLAG_OMIT_STREAM_HEADER | \
436 	 BTRFS_SEND_FLAG_OMIT_END_CMD)
437 struct btrfs_ioctl_send_args {
438 	__s64 send_fd;
439 	__u64 clone_sources_count;
440 	__u64 __user *clone_sources;
441 	__u64 parent_root;
442 	__u64 flags;
443 	__u64 reserved[4];
444 };
445 struct btrfs_ioctl_get_subvol_info_args {
446 
447 	__u64 treeid;
448 
449 	char name[BTRFS_VOL_NAME_MAX + 1];
450 
451 	__u64 parent_id;
452 
453 	__u64 dirid;
454 
455 	__u64 generation;
456 
457 	__u64 flags;
458 
459 	__u8 uuid[BTRFS_UUID_SIZE];
460 
461 	__u8 parent_uuid[BTRFS_UUID_SIZE];
462 
463 	__u8 received_uuid[BTRFS_UUID_SIZE];
464 
465 	__u64 ctransid;
466 	__u64 otransid;
467 	__u64 stransid;
468 	__u64 rtransid;
469 
470 	struct btrfs_ioctl_timespec ctime;
471 	struct btrfs_ioctl_timespec otime;
472 	struct btrfs_ioctl_timespec stime;
473 	struct btrfs_ioctl_timespec rtime;
474 
475 	__u64 reserved[8];
476 };
477 #define BTRFS_MAX_ROOTREF_BUFFER_NUM 255
478 struct btrfs_ioctl_get_subvol_rootref_args {
479 
480 		__u64 min_treeid;
481 
482 		struct {
483 			__u64 treeid;
484 			__u64 dirid;
485 		} rootref[BTRFS_MAX_ROOTREF_BUFFER_NUM];
486 
487 		__u8 num_items;
488 		__u8 align[7];
489 };
490 enum btrfs_err_code {
491 	BTRFS_ERROR_DEV_RAID1_MIN_NOT_MET = 1,
492 	BTRFS_ERROR_DEV_RAID10_MIN_NOT_MET,
493 	BTRFS_ERROR_DEV_RAID5_MIN_NOT_MET,
494 	BTRFS_ERROR_DEV_RAID6_MIN_NOT_MET,
495 	BTRFS_ERROR_DEV_TGT_REPLACE,
496 	BTRFS_ERROR_DEV_MISSING_NOT_FOUND,
497 	BTRFS_ERROR_DEV_ONLY_WRITABLE,
498 	BTRFS_ERROR_DEV_EXCL_RUN_IN_PROGRESS
499 };
500 #define BTRFS_IOC_SNAP_CREATE _IOW(BTRFS_IOCTL_MAGIC, 1, \
501 				   struct btrfs_ioctl_vol_args)
502 #define BTRFS_IOC_DEFRAG _IOW(BTRFS_IOCTL_MAGIC, 2, \
503 				   struct btrfs_ioctl_vol_args)
504 #define BTRFS_IOC_RESIZE _IOW(BTRFS_IOCTL_MAGIC, 3, \
505 				   struct btrfs_ioctl_vol_args)
506 #define BTRFS_IOC_SCAN_DEV _IOW(BTRFS_IOCTL_MAGIC, 4, \
507 				   struct btrfs_ioctl_vol_args)
508 #define BTRFS_IOC_TRANS_START  _IO(BTRFS_IOCTL_MAGIC, 6)
509 #define BTRFS_IOC_TRANS_END    _IO(BTRFS_IOCTL_MAGIC, 7)
510 #define BTRFS_IOC_SYNC         _IO(BTRFS_IOCTL_MAGIC, 8)
511 #define BTRFS_IOC_CLONE        _IOW(BTRFS_IOCTL_MAGIC, 9, int)
512 #define BTRFS_IOC_ADD_DEV _IOW(BTRFS_IOCTL_MAGIC, 10, \
513 				   struct btrfs_ioctl_vol_args)
514 #define BTRFS_IOC_RM_DEV _IOW(BTRFS_IOCTL_MAGIC, 11, \
515 				   struct btrfs_ioctl_vol_args)
516 #define BTRFS_IOC_BALANCE _IOW(BTRFS_IOCTL_MAGIC, 12, \
517 				   struct btrfs_ioctl_vol_args)
518 #define BTRFS_IOC_CLONE_RANGE _IOW(BTRFS_IOCTL_MAGIC, 13, \
519 				  struct btrfs_ioctl_clone_range_args)
520 #define BTRFS_IOC_SUBVOL_CREATE _IOW(BTRFS_IOCTL_MAGIC, 14, \
521 				   struct btrfs_ioctl_vol_args)
522 #define BTRFS_IOC_SNAP_DESTROY _IOW(BTRFS_IOCTL_MAGIC, 15, \
523 				struct btrfs_ioctl_vol_args)
524 #define BTRFS_IOC_DEFRAG_RANGE _IOW(BTRFS_IOCTL_MAGIC, 16, \
525 				struct btrfs_ioctl_defrag_range_args)
526 #define BTRFS_IOC_TREE_SEARCH _IOWR(BTRFS_IOCTL_MAGIC, 17, \
527 				   struct btrfs_ioctl_search_args)
528 #define BTRFS_IOC_TREE_SEARCH_V2 _IOWR(BTRFS_IOCTL_MAGIC, 17, \
529 					   struct btrfs_ioctl_search_args_v2)
530 #define BTRFS_IOC_INO_LOOKUP _IOWR(BTRFS_IOCTL_MAGIC, 18, \
531 				   struct btrfs_ioctl_ino_lookup_args)
532 #define BTRFS_IOC_DEFAULT_SUBVOL _IOW(BTRFS_IOCTL_MAGIC, 19, __u64)
533 #define BTRFS_IOC_SPACE_INFO _IOWR(BTRFS_IOCTL_MAGIC, 20, \
534 				    struct btrfs_ioctl_space_args)
535 #define BTRFS_IOC_START_SYNC _IOR(BTRFS_IOCTL_MAGIC, 24, __u64)
536 #define BTRFS_IOC_WAIT_SYNC  _IOW(BTRFS_IOCTL_MAGIC, 22, __u64)
537 #define BTRFS_IOC_SNAP_CREATE_V2 _IOW(BTRFS_IOCTL_MAGIC, 23, \
538 				   struct btrfs_ioctl_vol_args_v2)
539 #define BTRFS_IOC_SUBVOL_CREATE_V2 _IOW(BTRFS_IOCTL_MAGIC, 24, \
540 				   struct btrfs_ioctl_vol_args_v2)
541 #define BTRFS_IOC_SUBVOL_GETFLAGS _IOR(BTRFS_IOCTL_MAGIC, 25, __u64)
542 #define BTRFS_IOC_SUBVOL_SETFLAGS _IOW(BTRFS_IOCTL_MAGIC, 26, __u64)
543 #define BTRFS_IOC_SCRUB _IOWR(BTRFS_IOCTL_MAGIC, 27, \
544 			      struct btrfs_ioctl_scrub_args)
545 #define BTRFS_IOC_SCRUB_CANCEL _IO(BTRFS_IOCTL_MAGIC, 28)
546 #define BTRFS_IOC_SCRUB_PROGRESS _IOWR(BTRFS_IOCTL_MAGIC, 29, \
547 				       struct btrfs_ioctl_scrub_args)
548 #define BTRFS_IOC_DEV_INFO _IOWR(BTRFS_IOCTL_MAGIC, 30, \
549 				 struct btrfs_ioctl_dev_info_args)
550 #define BTRFS_IOC_FS_INFO _IOR(BTRFS_IOCTL_MAGIC, 31, \
551 			       struct btrfs_ioctl_fs_info_args)
552 #define BTRFS_IOC_BALANCE_V2 _IOWR(BTRFS_IOCTL_MAGIC, 32, \
553 				   struct btrfs_ioctl_balance_args)
554 #define BTRFS_IOC_BALANCE_CTL _IOW(BTRFS_IOCTL_MAGIC, 33, int)
555 #define BTRFS_IOC_BALANCE_PROGRESS _IOR(BTRFS_IOCTL_MAGIC, 34, \
556 					struct btrfs_ioctl_balance_args)
557 #define BTRFS_IOC_INO_PATHS _IOWR(BTRFS_IOCTL_MAGIC, 35, \
558 					struct btrfs_ioctl_ino_path_args)
559 #define BTRFS_IOC_LOGICAL_INO _IOWR(BTRFS_IOCTL_MAGIC, 36, \
560 					struct btrfs_ioctl_logical_ino_args)
561 #define BTRFS_IOC_SET_RECEIVED_SUBVOL _IOWR(BTRFS_IOCTL_MAGIC, 37, \
562 				struct btrfs_ioctl_received_subvol_args)
563 #define BTRFS_IOC_SEND _IOW(BTRFS_IOCTL_MAGIC, 38, struct btrfs_ioctl_send_args)
564 #define BTRFS_IOC_DEVICES_READY _IOR(BTRFS_IOCTL_MAGIC, 39, \
565 				     struct btrfs_ioctl_vol_args)
566 #define BTRFS_IOC_QUOTA_CTL _IOWR(BTRFS_IOCTL_MAGIC, 40, \
567 			       struct btrfs_ioctl_quota_ctl_args)
568 #define BTRFS_IOC_QGROUP_ASSIGN _IOW(BTRFS_IOCTL_MAGIC, 41, \
569 			       struct btrfs_ioctl_qgroup_assign_args)
570 #define BTRFS_IOC_QGROUP_CREATE _IOW(BTRFS_IOCTL_MAGIC, 42, \
571 			       struct btrfs_ioctl_qgroup_create_args)
572 #define BTRFS_IOC_QGROUP_LIMIT _IOR(BTRFS_IOCTL_MAGIC, 43, \
573 			       struct btrfs_ioctl_qgroup_limit_args)
574 #define BTRFS_IOC_QUOTA_RESCAN _IOW(BTRFS_IOCTL_MAGIC, 44, \
575 			       struct btrfs_ioctl_quota_rescan_args)
576 #define BTRFS_IOC_QUOTA_RESCAN_STATUS _IOR(BTRFS_IOCTL_MAGIC, 45, \
577 			       struct btrfs_ioctl_quota_rescan_args)
578 #define BTRFS_IOC_QUOTA_RESCAN_WAIT _IO(BTRFS_IOCTL_MAGIC, 46)
579 #define BTRFS_IOC_GET_FSLABEL _IOR(BTRFS_IOCTL_MAGIC, 49, \
580 				   char[BTRFS_LABEL_SIZE])
581 #define BTRFS_IOC_SET_FSLABEL _IOW(BTRFS_IOCTL_MAGIC, 50, \
582 				   char[BTRFS_LABEL_SIZE])
583 #define BTRFS_IOC_GET_DEV_STATS _IOWR(BTRFS_IOCTL_MAGIC, 52, \
584 				      struct btrfs_ioctl_get_dev_stats)
585 #define BTRFS_IOC_DEV_REPLACE _IOWR(BTRFS_IOCTL_MAGIC, 53, \
586 				    struct btrfs_ioctl_dev_replace_args)
587 #define BTRFS_IOC_FILE_EXTENT_SAME _IOWR(BTRFS_IOCTL_MAGIC, 54, \
588 					 struct btrfs_ioctl_same_args)
589 #define BTRFS_IOC_GET_FEATURES _IOR(BTRFS_IOCTL_MAGIC, 57, \
590 				   struct btrfs_ioctl_feature_flags)
591 #define BTRFS_IOC_SET_FEATURES _IOW(BTRFS_IOCTL_MAGIC, 57, \
592 				   struct btrfs_ioctl_feature_flags[2])
593 #define BTRFS_IOC_GET_SUPPORTED_FEATURES _IOR(BTRFS_IOCTL_MAGIC, 57, \
594 				   struct btrfs_ioctl_feature_flags[3])
595 #define BTRFS_IOC_RM_DEV_V2 _IOW(BTRFS_IOCTL_MAGIC, 58, \
596 				   struct btrfs_ioctl_vol_args_v2)
597 #define BTRFS_IOC_LOGICAL_INO_V2 _IOWR(BTRFS_IOCTL_MAGIC, 59, \
598 					struct btrfs_ioctl_logical_ino_args)
599 #define BTRFS_IOC_GET_SUBVOL_INFO _IOR(BTRFS_IOCTL_MAGIC, 60, \
600 				struct btrfs_ioctl_get_subvol_info_args)
601 #define BTRFS_IOC_GET_SUBVOL_ROOTREF _IOWR(BTRFS_IOCTL_MAGIC, 61, \
602 				struct btrfs_ioctl_get_subvol_rootref_args)
603 #define BTRFS_IOC_INO_LOOKUP_USER _IOWR(BTRFS_IOCTL_MAGIC, 62, \
604 				struct btrfs_ioctl_ino_lookup_user_args)
605 #endif
606