1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19#ifndef _UAPI_LINUX_BTRFS_H
20#define _UAPI_LINUX_BTRFS_H
21#include <linux/types.h>
22#include <linux/ioctl.h>
23
24#define BTRFS_IOCTL_MAGIC 0x94
25#define BTRFS_VOL_NAME_MAX 255
26#define BTRFS_LABEL_SIZE 256
27
28
29#define BTRFS_PATH_NAME_MAX 4087
30struct btrfs_ioctl_vol_args {
31 __s64 fd;
32 char name[BTRFS_PATH_NAME_MAX + 1];
33};
34
35#define BTRFS_DEVICE_PATH_NAME_MAX 1024
36
37#define BTRFS_DEVICE_SPEC_BY_ID (1ULL << 3)
38
39#define BTRFS_VOL_ARG_V2_FLAGS_SUPPORTED \
40 (BTRFS_SUBVOL_CREATE_ASYNC | \
41 BTRFS_SUBVOL_RDONLY | \
42 BTRFS_SUBVOL_QGROUP_INHERIT | \
43 BTRFS_DEVICE_SPEC_BY_ID)
44
45#define BTRFS_FSID_SIZE 16
46#define BTRFS_UUID_SIZE 16
47#define BTRFS_UUID_UNPARSED_SIZE 37
48
49
50
51
52
53
54
55
56#define BTRFS_QGROUP_LIMIT_MAX_RFER (1ULL << 0)
57#define BTRFS_QGROUP_LIMIT_MAX_EXCL (1ULL << 1)
58#define BTRFS_QGROUP_LIMIT_RSV_RFER (1ULL << 2)
59#define BTRFS_QGROUP_LIMIT_RSV_EXCL (1ULL << 3)
60#define BTRFS_QGROUP_LIMIT_RFER_CMPR (1ULL << 4)
61#define BTRFS_QGROUP_LIMIT_EXCL_CMPR (1ULL << 5)
62
63struct btrfs_qgroup_limit {
64 __u64 flags;
65 __u64 max_rfer;
66 __u64 max_excl;
67 __u64 rsv_rfer;
68 __u64 rsv_excl;
69};
70
71
72
73
74
75
76
77#define BTRFS_QGROUP_INHERIT_SET_LIMITS (1ULL << 0)
78
79struct btrfs_qgroup_inherit {
80 __u64 flags;
81 __u64 num_qgroups;
82 __u64 num_ref_copies;
83 __u64 num_excl_copies;
84 struct btrfs_qgroup_limit lim;
85 __u64 qgroups[0];
86};
87
88struct btrfs_ioctl_qgroup_limit_args {
89 __u64 qgroupid;
90 struct btrfs_qgroup_limit lim;
91};
92
93
94
95
96
97
98
99
100
101
102
103#define BTRFS_SUBVOL_CREATE_ASYNC (1ULL << 0)
104#define BTRFS_SUBVOL_RDONLY (1ULL << 1)
105#define BTRFS_SUBVOL_QGROUP_INHERIT (1ULL << 2)
106
107#define BTRFS_SUBVOL_NAME_MAX 4039
108struct btrfs_ioctl_vol_args_v2 {
109 __s64 fd;
110 __u64 transid;
111 __u64 flags;
112 union {
113 struct {
114 __u64 size;
115 struct btrfs_qgroup_inherit __user *qgroup_inherit;
116 };
117 __u64 unused[4];
118 };
119 union {
120 char name[BTRFS_SUBVOL_NAME_MAX + 1];
121 __u64 devid;
122 };
123};
124
125
126
127
128
129struct btrfs_scrub_progress {
130 __u64 data_extents_scrubbed;
131 __u64 tree_extents_scrubbed;
132 __u64 data_bytes_scrubbed;
133 __u64 tree_bytes_scrubbed;
134 __u64 read_errors;
135 __u64 csum_errors;
136 __u64 verify_errors;
137
138
139
140 __u64 no_csum;
141
142
143 __u64 csum_discards;
144
145 __u64 super_errors;
146 __u64 malloc_errors;
147
148
149 __u64 uncorrectable_errors;
150
151
152 __u64 corrected_errors;
153 __u64 last_physical;
154
155
156 __u64 unverified_errors;
157
158
159
160};
161
162#define BTRFS_SCRUB_READONLY 1
163struct btrfs_ioctl_scrub_args {
164 __u64 devid;
165 __u64 start;
166 __u64 end;
167 __u64 flags;
168 struct btrfs_scrub_progress progress;
169
170 __u64 unused[(1024-32-sizeof(struct btrfs_scrub_progress))/8];
171};
172
173#define BTRFS_IOCTL_DEV_REPLACE_CONT_READING_FROM_SRCDEV_MODE_ALWAYS 0
174#define BTRFS_IOCTL_DEV_REPLACE_CONT_READING_FROM_SRCDEV_MODE_AVOID 1
175struct btrfs_ioctl_dev_replace_start_params {
176 __u64 srcdevid;
177 __u64 cont_reading_from_srcdev_mode;
178
179 __u8 srcdev_name[BTRFS_DEVICE_PATH_NAME_MAX + 1];
180 __u8 tgtdev_name[BTRFS_DEVICE_PATH_NAME_MAX + 1];
181};
182
183#define BTRFS_IOCTL_DEV_REPLACE_STATE_NEVER_STARTED 0
184#define BTRFS_IOCTL_DEV_REPLACE_STATE_STARTED 1
185#define BTRFS_IOCTL_DEV_REPLACE_STATE_FINISHED 2
186#define BTRFS_IOCTL_DEV_REPLACE_STATE_CANCELED 3
187#define BTRFS_IOCTL_DEV_REPLACE_STATE_SUSPENDED 4
188struct btrfs_ioctl_dev_replace_status_params {
189 __u64 replace_state;
190 __u64 progress_1000;
191 __u64 time_started;
192 __u64 time_stopped;
193 __u64 num_write_errors;
194 __u64 num_uncorrectable_read_errors;
195};
196
197#define BTRFS_IOCTL_DEV_REPLACE_CMD_START 0
198#define BTRFS_IOCTL_DEV_REPLACE_CMD_STATUS 1
199#define BTRFS_IOCTL_DEV_REPLACE_CMD_CANCEL 2
200#define BTRFS_IOCTL_DEV_REPLACE_RESULT_NO_ERROR 0
201#define BTRFS_IOCTL_DEV_REPLACE_RESULT_NOT_STARTED 1
202#define BTRFS_IOCTL_DEV_REPLACE_RESULT_ALREADY_STARTED 2
203#define BTRFS_IOCTL_DEV_REPLACE_RESULT_SCRUB_INPROGRESS 3
204struct btrfs_ioctl_dev_replace_args {
205 __u64 cmd;
206 __u64 result;
207
208 union {
209 struct btrfs_ioctl_dev_replace_start_params start;
210 struct btrfs_ioctl_dev_replace_status_params status;
211 };
212
213 __u64 spare[64];
214};
215
216struct btrfs_ioctl_dev_info_args {
217 __u64 devid;
218 __u8 uuid[BTRFS_UUID_SIZE];
219 __u64 bytes_used;
220 __u64 total_bytes;
221 __u64 unused[379];
222 __u8 path[BTRFS_DEVICE_PATH_NAME_MAX];
223};
224
225struct btrfs_ioctl_fs_info_args {
226 __u64 max_id;
227 __u64 num_devices;
228 __u8 fsid[BTRFS_FSID_SIZE];
229 __u32 nodesize;
230 __u32 sectorsize;
231 __u32 clone_alignment;
232 __u32 reserved32;
233 __u64 reserved[122];
234};
235
236
237
238
239
240
241
242#define BTRFS_FEATURE_COMPAT_RO_FREE_SPACE_TREE (1ULL << 0)
243
244#define BTRFS_FEATURE_INCOMPAT_MIXED_BACKREF (1ULL << 0)
245#define BTRFS_FEATURE_INCOMPAT_DEFAULT_SUBVOL (1ULL << 1)
246#define BTRFS_FEATURE_INCOMPAT_MIXED_GROUPS (1ULL << 2)
247#define BTRFS_FEATURE_INCOMPAT_COMPRESS_LZO (1ULL << 3)
248
249
250
251
252
253
254#define BTRFS_FEATURE_INCOMPAT_COMPRESS_LZOv2 (1ULL << 4)
255
256
257
258
259
260#define BTRFS_FEATURE_INCOMPAT_BIG_METADATA (1ULL << 5)
261
262#define BTRFS_FEATURE_INCOMPAT_EXTENDED_IREF (1ULL << 6)
263#define BTRFS_FEATURE_INCOMPAT_RAID56 (1ULL << 7)
264#define BTRFS_FEATURE_INCOMPAT_SKINNY_METADATA (1ULL << 8)
265#define BTRFS_FEATURE_INCOMPAT_NO_HOLES (1ULL << 9)
266
267struct btrfs_ioctl_feature_flags {
268 __u64 compat_flags;
269 __u64 compat_ro_flags;
270 __u64 incompat_flags;
271};
272
273
274#define BTRFS_BALANCE_CTL_PAUSE 1
275#define BTRFS_BALANCE_CTL_CANCEL 2
276
277
278
279
280
281struct btrfs_balance_args {
282 __u64 profiles;
283 union {
284 __le64 usage;
285 struct {
286 __le32 usage_min;
287 __le32 usage_max;
288 };
289 };
290 __u64 devid;
291 __u64 pstart;
292 __u64 pend;
293 __u64 vstart;
294 __u64 vend;
295
296 __u64 target;
297
298 __u64 flags;
299
300
301
302
303
304
305 union {
306 __u64 limit;
307 struct {
308 __u32 limit_min;
309 __u32 limit_max;
310 };
311 };
312
313
314
315
316
317 __le32 stripes_min;
318 __le32 stripes_max;
319
320 __u64 unused[6];
321} __attribute__ ((__packed__));
322
323
324struct btrfs_balance_progress {
325 __u64 expected;
326
327 __u64 considered;
328 __u64 completed;
329};
330
331
332
333
334
335
336
337
338
339
340#define BTRFS_BALANCE_DATA (1ULL << 0)
341#define BTRFS_BALANCE_SYSTEM (1ULL << 1)
342#define BTRFS_BALANCE_METADATA (1ULL << 2)
343
344#define BTRFS_BALANCE_TYPE_MASK (BTRFS_BALANCE_DATA | \
345 BTRFS_BALANCE_SYSTEM | \
346 BTRFS_BALANCE_METADATA)
347
348#define BTRFS_BALANCE_FORCE (1ULL << 3)
349#define BTRFS_BALANCE_RESUME (1ULL << 4)
350
351
352
353
354
355
356
357
358
359#define BTRFS_BALANCE_ARGS_PROFILES (1ULL << 0)
360#define BTRFS_BALANCE_ARGS_USAGE (1ULL << 1)
361#define BTRFS_BALANCE_ARGS_DEVID (1ULL << 2)
362#define BTRFS_BALANCE_ARGS_DRANGE (1ULL << 3)
363#define BTRFS_BALANCE_ARGS_VRANGE (1ULL << 4)
364#define BTRFS_BALANCE_ARGS_LIMIT (1ULL << 5)
365#define BTRFS_BALANCE_ARGS_LIMIT_RANGE (1ULL << 6)
366#define BTRFS_BALANCE_ARGS_STRIPES_RANGE (1ULL << 7)
367#define BTRFS_BALANCE_ARGS_USAGE_RANGE (1ULL << 10)
368
369#define BTRFS_BALANCE_ARGS_MASK \
370 (BTRFS_BALANCE_ARGS_PROFILES | \
371 BTRFS_BALANCE_ARGS_USAGE | \
372 BTRFS_BALANCE_ARGS_DEVID | \
373 BTRFS_BALANCE_ARGS_DRANGE | \
374 BTRFS_BALANCE_ARGS_VRANGE | \
375 BTRFS_BALANCE_ARGS_LIMIT | \
376 BTRFS_BALANCE_ARGS_LIMIT_RANGE | \
377 BTRFS_BALANCE_ARGS_STRIPES_RANGE | \
378 BTRFS_BALANCE_ARGS_USAGE_RANGE)
379
380
381
382
383
384
385#define BTRFS_BALANCE_ARGS_CONVERT (1ULL << 8)
386#define BTRFS_BALANCE_ARGS_SOFT (1ULL << 9)
387
388
389
390
391
392
393
394
395#define BTRFS_BALANCE_STATE_RUNNING (1ULL << 0)
396#define BTRFS_BALANCE_STATE_PAUSE_REQ (1ULL << 1)
397#define BTRFS_BALANCE_STATE_CANCEL_REQ (1ULL << 2)
398
399struct btrfs_ioctl_balance_args {
400 __u64 flags;
401 __u64 state;
402
403 struct btrfs_balance_args data;
404 struct btrfs_balance_args meta;
405 struct btrfs_balance_args sys;
406
407 struct btrfs_balance_progress stat;
408
409 __u64 unused[72];
410};
411
412#define BTRFS_INO_LOOKUP_PATH_MAX 4080
413struct btrfs_ioctl_ino_lookup_args {
414 __u64 treeid;
415 __u64 objectid;
416 char name[BTRFS_INO_LOOKUP_PATH_MAX];
417};
418
419struct btrfs_ioctl_search_key {
420
421 __u64 tree_id;
422
423
424 __u64 min_objectid;
425 __u64 max_objectid;
426
427
428 __u64 min_offset;
429 __u64 max_offset;
430
431
432 __u64 min_transid;
433 __u64 max_transid;
434
435
436 __u32 min_type;
437 __u32 max_type;
438
439
440
441
442
443 __u32 nr_items;
444
445
446 __u32 unused;
447
448
449 __u64 unused1;
450 __u64 unused2;
451 __u64 unused3;
452 __u64 unused4;
453};
454
455struct btrfs_ioctl_search_header {
456 __u64 transid;
457 __u64 objectid;
458 __u64 offset;
459 __u32 type;
460 __u32 len;
461};
462
463#define BTRFS_SEARCH_ARGS_BUFSIZE (4096 - sizeof(struct btrfs_ioctl_search_key))
464
465
466
467
468
469struct btrfs_ioctl_search_args {
470 struct btrfs_ioctl_search_key key;
471 char buf[BTRFS_SEARCH_ARGS_BUFSIZE];
472};
473
474struct btrfs_ioctl_search_args_v2 {
475 struct btrfs_ioctl_search_key key;
476 __u64 buf_size;
477
478
479 __u64 buf[0];
480};
481
482struct btrfs_ioctl_clone_range_args {
483 __s64 src_fd;
484 __u64 src_offset, src_length;
485 __u64 dest_offset;
486};
487
488
489
490
491
492
493
494#define BTRFS_DEFRAG_RANGE_COMPRESS 1
495#define BTRFS_DEFRAG_RANGE_START_IO 2
496struct btrfs_ioctl_defrag_range_args {
497
498 __u64 start;
499
500
501 __u64 len;
502
503
504
505
506
507 __u64 flags;
508
509
510
511
512
513
514 __u32 extent_thresh;
515
516
517
518
519
520
521 __u32 compress_type;
522
523
524 __u32 unused[4];
525};
526
527
528#define BTRFS_SAME_DATA_DIFFERS 1
529
530struct btrfs_ioctl_same_extent_info {
531 __s64 fd;
532 __u64 logical_offset;
533 __u64 bytes_deduped;
534
535
536
537
538
539
540 __s32 status;
541 __u32 reserved;
542};
543
544struct btrfs_ioctl_same_args {
545 __u64 logical_offset;
546 __u64 length;
547 __u16 dest_count;
548 __u16 reserved1;
549 __u32 reserved2;
550 struct btrfs_ioctl_same_extent_info info[0];
551};
552
553struct btrfs_ioctl_space_info {
554 __u64 flags;
555 __u64 total_bytes;
556 __u64 used_bytes;
557};
558
559struct btrfs_ioctl_space_args {
560 __u64 space_slots;
561 __u64 total_spaces;
562 struct btrfs_ioctl_space_info spaces[0];
563};
564
565struct btrfs_data_container {
566 __u32 bytes_left;
567 __u32 bytes_missing;
568 __u32 elem_cnt;
569 __u32 elem_missed;
570 __u64 val[0];
571};
572
573struct btrfs_ioctl_ino_path_args {
574 __u64 inum;
575 __u64 size;
576 __u64 reserved[4];
577
578 __u64 fspath;
579};
580
581struct btrfs_ioctl_logical_ino_args {
582 __u64 logical;
583 __u64 size;
584 __u64 reserved[4];
585
586 __u64 inodes;
587};
588
589enum btrfs_dev_stat_values {
590
591 BTRFS_DEV_STAT_WRITE_ERRS,
592 BTRFS_DEV_STAT_READ_ERRS,
593 BTRFS_DEV_STAT_FLUSH_ERRS,
594
595
596 BTRFS_DEV_STAT_CORRUPTION_ERRS,
597
598
599
600
601
602 BTRFS_DEV_STAT_GENERATION_ERRS,
603
604
605 BTRFS_DEV_STAT_VALUES_MAX
606};
607
608
609#define BTRFS_DEV_STATS_RESET (1ULL << 0)
610
611struct btrfs_ioctl_get_dev_stats {
612 __u64 devid;
613 __u64 nr_items;
614 __u64 flags;
615
616
617 __u64 values[BTRFS_DEV_STAT_VALUES_MAX];
618
619 __u64 unused[128 - 2 - BTRFS_DEV_STAT_VALUES_MAX];
620};
621
622#define BTRFS_QUOTA_CTL_ENABLE 1
623#define BTRFS_QUOTA_CTL_DISABLE 2
624#define BTRFS_QUOTA_CTL_RESCAN__NOTUSED 3
625struct btrfs_ioctl_quota_ctl_args {
626 __u64 cmd;
627 __u64 status;
628};
629
630struct btrfs_ioctl_quota_rescan_args {
631 __u64 flags;
632 __u64 progress;
633 __u64 reserved[6];
634};
635
636struct btrfs_ioctl_qgroup_assign_args {
637 __u64 assign;
638 __u64 src;
639 __u64 dst;
640};
641
642struct btrfs_ioctl_qgroup_create_args {
643 __u64 create;
644 __u64 qgroupid;
645};
646struct btrfs_ioctl_timespec {
647 __u64 sec;
648 __u32 nsec;
649};
650
651struct btrfs_ioctl_received_subvol_args {
652 char uuid[BTRFS_UUID_SIZE];
653 __u64 stransid;
654 __u64 rtransid;
655 struct btrfs_ioctl_timespec stime;
656 struct btrfs_ioctl_timespec rtime;
657 __u64 flags;
658 __u64 reserved[16];
659};
660
661
662
663
664
665
666#define BTRFS_SEND_FLAG_NO_FILE_DATA 0x1
667
668
669
670
671
672#define BTRFS_SEND_FLAG_OMIT_STREAM_HEADER 0x2
673
674
675
676
677
678
679#define BTRFS_SEND_FLAG_OMIT_END_CMD 0x4
680
681#define BTRFS_SEND_FLAG_MASK \
682 (BTRFS_SEND_FLAG_NO_FILE_DATA | \
683 BTRFS_SEND_FLAG_OMIT_STREAM_HEADER | \
684 BTRFS_SEND_FLAG_OMIT_END_CMD)
685
686struct btrfs_ioctl_send_args {
687 __s64 send_fd;
688 __u64 clone_sources_count;
689 __u64 __user *clone_sources;
690 __u64 parent_root;
691 __u64 flags;
692 __u64 reserved[4];
693};
694
695
696enum btrfs_err_code {
697 BTRFS_ERROR_DEV_RAID1_MIN_NOT_MET = 1,
698 BTRFS_ERROR_DEV_RAID10_MIN_NOT_MET,
699 BTRFS_ERROR_DEV_RAID5_MIN_NOT_MET,
700 BTRFS_ERROR_DEV_RAID6_MIN_NOT_MET,
701 BTRFS_ERROR_DEV_TGT_REPLACE,
702 BTRFS_ERROR_DEV_MISSING_NOT_FOUND,
703 BTRFS_ERROR_DEV_ONLY_WRITABLE,
704 BTRFS_ERROR_DEV_EXCL_RUN_IN_PROGRESS
705};
706
707
708
709static inline char *btrfs_err_str(enum btrfs_err_code err_code)
710{
711 switch (err_code) {
712 case BTRFS_ERROR_DEV_RAID1_MIN_NOT_MET:
713 return "unable to go below two devices on raid1";
714 case BTRFS_ERROR_DEV_RAID10_MIN_NOT_MET:
715 return "unable to go below four devices on raid10";
716 case BTRFS_ERROR_DEV_RAID5_MIN_NOT_MET:
717 return "unable to go below two devices on raid5";
718 case BTRFS_ERROR_DEV_RAID6_MIN_NOT_MET:
719 return "unable to go below three devices on raid6";
720 case BTRFS_ERROR_DEV_TGT_REPLACE:
721 return "unable to remove the dev_replace target dev";
722 case BTRFS_ERROR_DEV_MISSING_NOT_FOUND:
723 return "no missing devices found to remove";
724 case BTRFS_ERROR_DEV_ONLY_WRITABLE:
725 return "unable to remove the only writeable device";
726 case BTRFS_ERROR_DEV_EXCL_RUN_IN_PROGRESS:
727 return "add/delete/balance/replace/resize operation "\
728 "in progress";
729 default:
730 return NULL;
731 }
732}
733
734#define BTRFS_IOC_SNAP_CREATE _IOW(BTRFS_IOCTL_MAGIC, 1, \
735 struct btrfs_ioctl_vol_args)
736#define BTRFS_IOC_DEFRAG _IOW(BTRFS_IOCTL_MAGIC, 2, \
737 struct btrfs_ioctl_vol_args)
738#define BTRFS_IOC_RESIZE _IOW(BTRFS_IOCTL_MAGIC, 3, \
739 struct btrfs_ioctl_vol_args)
740#define BTRFS_IOC_SCAN_DEV _IOW(BTRFS_IOCTL_MAGIC, 4, \
741 struct btrfs_ioctl_vol_args)
742
743
744
745
746#define BTRFS_IOC_TRANS_START _IO(BTRFS_IOCTL_MAGIC, 6)
747#define BTRFS_IOC_TRANS_END _IO(BTRFS_IOCTL_MAGIC, 7)
748#define BTRFS_IOC_SYNC _IO(BTRFS_IOCTL_MAGIC, 8)
749
750#define BTRFS_IOC_CLONE _IOW(BTRFS_IOCTL_MAGIC, 9, int)
751#define BTRFS_IOC_ADD_DEV _IOW(BTRFS_IOCTL_MAGIC, 10, \
752 struct btrfs_ioctl_vol_args)
753#define BTRFS_IOC_RM_DEV _IOW(BTRFS_IOCTL_MAGIC, 11, \
754 struct btrfs_ioctl_vol_args)
755#define BTRFS_IOC_BALANCE _IOW(BTRFS_IOCTL_MAGIC, 12, \
756 struct btrfs_ioctl_vol_args)
757
758#define BTRFS_IOC_CLONE_RANGE _IOW(BTRFS_IOCTL_MAGIC, 13, \
759 struct btrfs_ioctl_clone_range_args)
760
761#define BTRFS_IOC_SUBVOL_CREATE _IOW(BTRFS_IOCTL_MAGIC, 14, \
762 struct btrfs_ioctl_vol_args)
763#define BTRFS_IOC_SNAP_DESTROY _IOW(BTRFS_IOCTL_MAGIC, 15, \
764 struct btrfs_ioctl_vol_args)
765#define BTRFS_IOC_DEFRAG_RANGE _IOW(BTRFS_IOCTL_MAGIC, 16, \
766 struct btrfs_ioctl_defrag_range_args)
767#define BTRFS_IOC_TREE_SEARCH _IOWR(BTRFS_IOCTL_MAGIC, 17, \
768 struct btrfs_ioctl_search_args)
769#define BTRFS_IOC_TREE_SEARCH_V2 _IOWR(BTRFS_IOCTL_MAGIC, 17, \
770 struct btrfs_ioctl_search_args_v2)
771#define BTRFS_IOC_INO_LOOKUP _IOWR(BTRFS_IOCTL_MAGIC, 18, \
772 struct btrfs_ioctl_ino_lookup_args)
773#define BTRFS_IOC_DEFAULT_SUBVOL _IOW(BTRFS_IOCTL_MAGIC, 19, __u64)
774#define BTRFS_IOC_SPACE_INFO _IOWR(BTRFS_IOCTL_MAGIC, 20, \
775 struct btrfs_ioctl_space_args)
776#define BTRFS_IOC_START_SYNC _IOR(BTRFS_IOCTL_MAGIC, 24, __u64)
777#define BTRFS_IOC_WAIT_SYNC _IOW(BTRFS_IOCTL_MAGIC, 22, __u64)
778#define BTRFS_IOC_SNAP_CREATE_V2 _IOW(BTRFS_IOCTL_MAGIC, 23, \
779 struct btrfs_ioctl_vol_args_v2)
780#define BTRFS_IOC_SUBVOL_CREATE_V2 _IOW(BTRFS_IOCTL_MAGIC, 24, \
781 struct btrfs_ioctl_vol_args_v2)
782#define BTRFS_IOC_SUBVOL_GETFLAGS _IOR(BTRFS_IOCTL_MAGIC, 25, __u64)
783#define BTRFS_IOC_SUBVOL_SETFLAGS _IOW(BTRFS_IOCTL_MAGIC, 26, __u64)
784#define BTRFS_IOC_SCRUB _IOWR(BTRFS_IOCTL_MAGIC, 27, \
785 struct btrfs_ioctl_scrub_args)
786#define BTRFS_IOC_SCRUB_CANCEL _IO(BTRFS_IOCTL_MAGIC, 28)
787#define BTRFS_IOC_SCRUB_PROGRESS _IOWR(BTRFS_IOCTL_MAGIC, 29, \
788 struct btrfs_ioctl_scrub_args)
789#define BTRFS_IOC_DEV_INFO _IOWR(BTRFS_IOCTL_MAGIC, 30, \
790 struct btrfs_ioctl_dev_info_args)
791#define BTRFS_IOC_FS_INFO _IOR(BTRFS_IOCTL_MAGIC, 31, \
792 struct btrfs_ioctl_fs_info_args)
793#define BTRFS_IOC_BALANCE_V2 _IOWR(BTRFS_IOCTL_MAGIC, 32, \
794 struct btrfs_ioctl_balance_args)
795#define BTRFS_IOC_BALANCE_CTL _IOW(BTRFS_IOCTL_MAGIC, 33, int)
796#define BTRFS_IOC_BALANCE_PROGRESS _IOR(BTRFS_IOCTL_MAGIC, 34, \
797 struct btrfs_ioctl_balance_args)
798#define BTRFS_IOC_INO_PATHS _IOWR(BTRFS_IOCTL_MAGIC, 35, \
799 struct btrfs_ioctl_ino_path_args)
800#define BTRFS_IOC_LOGICAL_INO _IOWR(BTRFS_IOCTL_MAGIC, 36, \
801 struct btrfs_ioctl_ino_path_args)
802#define BTRFS_IOC_SET_RECEIVED_SUBVOL _IOWR(BTRFS_IOCTL_MAGIC, 37, \
803 struct btrfs_ioctl_received_subvol_args)
804#define BTRFS_IOC_SEND _IOW(BTRFS_IOCTL_MAGIC, 38, struct btrfs_ioctl_send_args)
805#define BTRFS_IOC_DEVICES_READY _IOR(BTRFS_IOCTL_MAGIC, 39, \
806 struct btrfs_ioctl_vol_args)
807#define BTRFS_IOC_QUOTA_CTL _IOWR(BTRFS_IOCTL_MAGIC, 40, \
808 struct btrfs_ioctl_quota_ctl_args)
809#define BTRFS_IOC_QGROUP_ASSIGN _IOW(BTRFS_IOCTL_MAGIC, 41, \
810 struct btrfs_ioctl_qgroup_assign_args)
811#define BTRFS_IOC_QGROUP_CREATE _IOW(BTRFS_IOCTL_MAGIC, 42, \
812 struct btrfs_ioctl_qgroup_create_args)
813#define BTRFS_IOC_QGROUP_LIMIT _IOR(BTRFS_IOCTL_MAGIC, 43, \
814 struct btrfs_ioctl_qgroup_limit_args)
815#define BTRFS_IOC_QUOTA_RESCAN _IOW(BTRFS_IOCTL_MAGIC, 44, \
816 struct btrfs_ioctl_quota_rescan_args)
817#define BTRFS_IOC_QUOTA_RESCAN_STATUS _IOR(BTRFS_IOCTL_MAGIC, 45, \
818 struct btrfs_ioctl_quota_rescan_args)
819#define BTRFS_IOC_QUOTA_RESCAN_WAIT _IO(BTRFS_IOCTL_MAGIC, 46)
820#define BTRFS_IOC_GET_FSLABEL _IOR(BTRFS_IOCTL_MAGIC, 49, \
821 char[BTRFS_LABEL_SIZE])
822#define BTRFS_IOC_SET_FSLABEL _IOW(BTRFS_IOCTL_MAGIC, 50, \
823 char[BTRFS_LABEL_SIZE])
824#define BTRFS_IOC_GET_DEV_STATS _IOWR(BTRFS_IOCTL_MAGIC, 52, \
825 struct btrfs_ioctl_get_dev_stats)
826#define BTRFS_IOC_DEV_REPLACE _IOWR(BTRFS_IOCTL_MAGIC, 53, \
827 struct btrfs_ioctl_dev_replace_args)
828#define BTRFS_IOC_FILE_EXTENT_SAME _IOWR(BTRFS_IOCTL_MAGIC, 54, \
829 struct btrfs_ioctl_same_args)
830#define BTRFS_IOC_GET_FEATURES _IOR(BTRFS_IOCTL_MAGIC, 57, \
831 struct btrfs_ioctl_feature_flags)
832#define BTRFS_IOC_SET_FEATURES _IOW(BTRFS_IOCTL_MAGIC, 57, \
833 struct btrfs_ioctl_feature_flags[2])
834#define BTRFS_IOC_GET_SUPPORTED_FEATURES _IOR(BTRFS_IOCTL_MAGIC, 57, \
835 struct btrfs_ioctl_feature_flags[3])
836#define BTRFS_IOC_RM_DEV_V2 _IOW(BTRFS_IOCTL_MAGIC, 58, \
837 struct btrfs_ioctl_vol_args_v2)
838
839#endif
840