0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018
0019
0020 #ifndef _UAPI_LINUX_BTRFS_H
0021 #define _UAPI_LINUX_BTRFS_H
0022 #include <linux/types.h>
0023 #include <linux/ioctl.h>
0024
0025 #define BTRFS_IOCTL_MAGIC 0x94
0026 #define BTRFS_VOL_NAME_MAX 255
0027 #define BTRFS_LABEL_SIZE 256
0028
0029
0030 #define BTRFS_PATH_NAME_MAX 4087
0031 struct btrfs_ioctl_vol_args {
0032 __s64 fd;
0033 char name[BTRFS_PATH_NAME_MAX + 1];
0034 };
0035
0036 #define BTRFS_DEVICE_PATH_NAME_MAX 1024
0037 #define BTRFS_SUBVOL_NAME_MAX 4039
0038
0039 #ifndef __KERNEL__
0040
0041 # define BTRFS_SUBVOL_CREATE_ASYNC (1ULL << 0)
0042 #endif
0043 #define BTRFS_SUBVOL_RDONLY (1ULL << 1)
0044 #define BTRFS_SUBVOL_QGROUP_INHERIT (1ULL << 2)
0045
0046 #define BTRFS_DEVICE_SPEC_BY_ID (1ULL << 3)
0047
0048 #define BTRFS_SUBVOL_SPEC_BY_ID (1ULL << 4)
0049
0050 #define BTRFS_VOL_ARG_V2_FLAGS_SUPPORTED \
0051 (BTRFS_SUBVOL_RDONLY | \
0052 BTRFS_SUBVOL_QGROUP_INHERIT | \
0053 BTRFS_DEVICE_SPEC_BY_ID | \
0054 BTRFS_SUBVOL_SPEC_BY_ID)
0055
0056 #define BTRFS_FSID_SIZE 16
0057 #define BTRFS_UUID_SIZE 16
0058 #define BTRFS_UUID_UNPARSED_SIZE 37
0059
0060
0061
0062
0063
0064
0065
0066
0067 #define BTRFS_QGROUP_LIMIT_MAX_RFER (1ULL << 0)
0068 #define BTRFS_QGROUP_LIMIT_MAX_EXCL (1ULL << 1)
0069 #define BTRFS_QGROUP_LIMIT_RSV_RFER (1ULL << 2)
0070 #define BTRFS_QGROUP_LIMIT_RSV_EXCL (1ULL << 3)
0071 #define BTRFS_QGROUP_LIMIT_RFER_CMPR (1ULL << 4)
0072 #define BTRFS_QGROUP_LIMIT_EXCL_CMPR (1ULL << 5)
0073
0074 struct btrfs_qgroup_limit {
0075 __u64 flags;
0076 __u64 max_rfer;
0077 __u64 max_excl;
0078 __u64 rsv_rfer;
0079 __u64 rsv_excl;
0080 };
0081
0082
0083
0084
0085
0086
0087
0088 #define BTRFS_QGROUP_INHERIT_SET_LIMITS (1ULL << 0)
0089
0090 struct btrfs_qgroup_inherit {
0091 __u64 flags;
0092 __u64 num_qgroups;
0093 __u64 num_ref_copies;
0094 __u64 num_excl_copies;
0095 struct btrfs_qgroup_limit lim;
0096 __u64 qgroups[];
0097 };
0098
0099 struct btrfs_ioctl_qgroup_limit_args {
0100 __u64 qgroupid;
0101 struct btrfs_qgroup_limit lim;
0102 };
0103
0104
0105
0106
0107
0108
0109
0110
0111
0112
0113
0114
0115
0116 #define BTRFS_DEVICE_REMOVE_ARGS_MASK \
0117 (BTRFS_DEVICE_SPEC_BY_ID)
0118
0119
0120 #define BTRFS_SUBVOL_CREATE_ARGS_MASK \
0121 (BTRFS_SUBVOL_RDONLY | \
0122 BTRFS_SUBVOL_QGROUP_INHERIT)
0123
0124
0125 #define BTRFS_SUBVOL_DELETE_ARGS_MASK \
0126 (BTRFS_SUBVOL_SPEC_BY_ID)
0127
0128 struct btrfs_ioctl_vol_args_v2 {
0129 __s64 fd;
0130 __u64 transid;
0131 __u64 flags;
0132 union {
0133 struct {
0134 __u64 size;
0135 struct btrfs_qgroup_inherit __user *qgroup_inherit;
0136 };
0137 __u64 unused[4];
0138 };
0139 union {
0140 char name[BTRFS_SUBVOL_NAME_MAX + 1];
0141 __u64 devid;
0142 __u64 subvolid;
0143 };
0144 };
0145
0146
0147
0148
0149
0150 struct btrfs_scrub_progress {
0151 __u64 data_extents_scrubbed;
0152 __u64 tree_extents_scrubbed;
0153 __u64 data_bytes_scrubbed;
0154 __u64 tree_bytes_scrubbed;
0155 __u64 read_errors;
0156 __u64 csum_errors;
0157 __u64 verify_errors;
0158
0159
0160
0161 __u64 no_csum;
0162
0163
0164 __u64 csum_discards;
0165
0166 __u64 super_errors;
0167 __u64 malloc_errors;
0168
0169
0170 __u64 uncorrectable_errors;
0171
0172
0173 __u64 corrected_errors;
0174 __u64 last_physical;
0175
0176
0177 __u64 unverified_errors;
0178
0179
0180
0181 };
0182
0183 #define BTRFS_SCRUB_READONLY 1
0184 struct btrfs_ioctl_scrub_args {
0185 __u64 devid;
0186 __u64 start;
0187 __u64 end;
0188 __u64 flags;
0189 struct btrfs_scrub_progress progress;
0190
0191 __u64 unused[(1024-32-sizeof(struct btrfs_scrub_progress))/8];
0192 };
0193
0194 #define BTRFS_IOCTL_DEV_REPLACE_CONT_READING_FROM_SRCDEV_MODE_ALWAYS 0
0195 #define BTRFS_IOCTL_DEV_REPLACE_CONT_READING_FROM_SRCDEV_MODE_AVOID 1
0196 struct btrfs_ioctl_dev_replace_start_params {
0197 __u64 srcdevid;
0198 __u64 cont_reading_from_srcdev_mode;
0199
0200 __u8 srcdev_name[BTRFS_DEVICE_PATH_NAME_MAX + 1];
0201 __u8 tgtdev_name[BTRFS_DEVICE_PATH_NAME_MAX + 1];
0202 };
0203
0204 #define BTRFS_IOCTL_DEV_REPLACE_STATE_NEVER_STARTED 0
0205 #define BTRFS_IOCTL_DEV_REPLACE_STATE_STARTED 1
0206 #define BTRFS_IOCTL_DEV_REPLACE_STATE_FINISHED 2
0207 #define BTRFS_IOCTL_DEV_REPLACE_STATE_CANCELED 3
0208 #define BTRFS_IOCTL_DEV_REPLACE_STATE_SUSPENDED 4
0209 struct btrfs_ioctl_dev_replace_status_params {
0210 __u64 replace_state;
0211 __u64 progress_1000;
0212 __u64 time_started;
0213 __u64 time_stopped;
0214 __u64 num_write_errors;
0215 __u64 num_uncorrectable_read_errors;
0216 };
0217
0218 #define BTRFS_IOCTL_DEV_REPLACE_CMD_START 0
0219 #define BTRFS_IOCTL_DEV_REPLACE_CMD_STATUS 1
0220 #define BTRFS_IOCTL_DEV_REPLACE_CMD_CANCEL 2
0221 #define BTRFS_IOCTL_DEV_REPLACE_RESULT_NO_ERROR 0
0222 #define BTRFS_IOCTL_DEV_REPLACE_RESULT_NOT_STARTED 1
0223 #define BTRFS_IOCTL_DEV_REPLACE_RESULT_ALREADY_STARTED 2
0224 #define BTRFS_IOCTL_DEV_REPLACE_RESULT_SCRUB_INPROGRESS 3
0225 struct btrfs_ioctl_dev_replace_args {
0226 __u64 cmd;
0227 __u64 result;
0228
0229 union {
0230 struct btrfs_ioctl_dev_replace_start_params start;
0231 struct btrfs_ioctl_dev_replace_status_params status;
0232 };
0233
0234 __u64 spare[64];
0235 };
0236
0237 struct btrfs_ioctl_dev_info_args {
0238 __u64 devid;
0239 __u8 uuid[BTRFS_UUID_SIZE];
0240 __u64 bytes_used;
0241 __u64 total_bytes;
0242 __u64 unused[379];
0243 __u8 path[BTRFS_DEVICE_PATH_NAME_MAX];
0244 };
0245
0246
0247
0248
0249
0250
0251 #define BTRFS_FS_INFO_FLAG_CSUM_INFO (1 << 0)
0252
0253
0254 #define BTRFS_FS_INFO_FLAG_GENERATION (1 << 1)
0255
0256 #define BTRFS_FS_INFO_FLAG_METADATA_UUID (1 << 2)
0257
0258 struct btrfs_ioctl_fs_info_args {
0259 __u64 max_id;
0260 __u64 num_devices;
0261 __u8 fsid[BTRFS_FSID_SIZE];
0262 __u32 nodesize;
0263 __u32 sectorsize;
0264 __u32 clone_alignment;
0265
0266 __u16 csum_type;
0267 __u16 csum_size;
0268 __u64 flags;
0269 __u64 generation;
0270 __u8 metadata_uuid[BTRFS_FSID_SIZE];
0271 __u8 reserved[944];
0272 };
0273
0274
0275
0276
0277
0278
0279
0280 #define BTRFS_FEATURE_COMPAT_RO_FREE_SPACE_TREE (1ULL << 0)
0281
0282
0283
0284
0285
0286
0287
0288
0289
0290 #define BTRFS_FEATURE_COMPAT_RO_FREE_SPACE_TREE_VALID (1ULL << 1)
0291 #define BTRFS_FEATURE_COMPAT_RO_VERITY (1ULL << 2)
0292
0293 #define BTRFS_FEATURE_INCOMPAT_MIXED_BACKREF (1ULL << 0)
0294 #define BTRFS_FEATURE_INCOMPAT_DEFAULT_SUBVOL (1ULL << 1)
0295 #define BTRFS_FEATURE_INCOMPAT_MIXED_GROUPS (1ULL << 2)
0296 #define BTRFS_FEATURE_INCOMPAT_COMPRESS_LZO (1ULL << 3)
0297 #define BTRFS_FEATURE_INCOMPAT_COMPRESS_ZSTD (1ULL << 4)
0298
0299
0300
0301
0302
0303 #define BTRFS_FEATURE_INCOMPAT_BIG_METADATA (1ULL << 5)
0304
0305 #define BTRFS_FEATURE_INCOMPAT_EXTENDED_IREF (1ULL << 6)
0306 #define BTRFS_FEATURE_INCOMPAT_RAID56 (1ULL << 7)
0307 #define BTRFS_FEATURE_INCOMPAT_SKINNY_METADATA (1ULL << 8)
0308 #define BTRFS_FEATURE_INCOMPAT_NO_HOLES (1ULL << 9)
0309 #define BTRFS_FEATURE_INCOMPAT_METADATA_UUID (1ULL << 10)
0310 #define BTRFS_FEATURE_INCOMPAT_RAID1C34 (1ULL << 11)
0311 #define BTRFS_FEATURE_INCOMPAT_ZONED (1ULL << 12)
0312 #define BTRFS_FEATURE_INCOMPAT_EXTENT_TREE_V2 (1ULL << 13)
0313
0314 struct btrfs_ioctl_feature_flags {
0315 __u64 compat_flags;
0316 __u64 compat_ro_flags;
0317 __u64 incompat_flags;
0318 };
0319
0320
0321 #define BTRFS_BALANCE_CTL_PAUSE 1
0322 #define BTRFS_BALANCE_CTL_CANCEL 2
0323
0324
0325
0326
0327
0328 struct btrfs_balance_args {
0329 __u64 profiles;
0330 union {
0331 __u64 usage;
0332 struct {
0333 __u32 usage_min;
0334 __u32 usage_max;
0335 };
0336 };
0337 __u64 devid;
0338 __u64 pstart;
0339 __u64 pend;
0340 __u64 vstart;
0341 __u64 vend;
0342
0343 __u64 target;
0344
0345 __u64 flags;
0346
0347
0348
0349
0350
0351
0352 union {
0353 __u64 limit;
0354 struct {
0355 __u32 limit_min;
0356 __u32 limit_max;
0357 };
0358 };
0359
0360
0361
0362
0363
0364 __u32 stripes_min;
0365 __u32 stripes_max;
0366
0367 __u64 unused[6];
0368 } __attribute__ ((__packed__));
0369
0370
0371 struct btrfs_balance_progress {
0372 __u64 expected;
0373
0374 __u64 considered;
0375 __u64 completed;
0376 };
0377
0378
0379
0380
0381
0382
0383
0384
0385
0386
0387 #define BTRFS_BALANCE_DATA (1ULL << 0)
0388 #define BTRFS_BALANCE_SYSTEM (1ULL << 1)
0389 #define BTRFS_BALANCE_METADATA (1ULL << 2)
0390
0391 #define BTRFS_BALANCE_TYPE_MASK (BTRFS_BALANCE_DATA | \
0392 BTRFS_BALANCE_SYSTEM | \
0393 BTRFS_BALANCE_METADATA)
0394
0395 #define BTRFS_BALANCE_FORCE (1ULL << 3)
0396 #define BTRFS_BALANCE_RESUME (1ULL << 4)
0397
0398
0399
0400
0401
0402
0403
0404
0405
0406 #define BTRFS_BALANCE_ARGS_PROFILES (1ULL << 0)
0407 #define BTRFS_BALANCE_ARGS_USAGE (1ULL << 1)
0408 #define BTRFS_BALANCE_ARGS_DEVID (1ULL << 2)
0409 #define BTRFS_BALANCE_ARGS_DRANGE (1ULL << 3)
0410 #define BTRFS_BALANCE_ARGS_VRANGE (1ULL << 4)
0411 #define BTRFS_BALANCE_ARGS_LIMIT (1ULL << 5)
0412 #define BTRFS_BALANCE_ARGS_LIMIT_RANGE (1ULL << 6)
0413 #define BTRFS_BALANCE_ARGS_STRIPES_RANGE (1ULL << 7)
0414 #define BTRFS_BALANCE_ARGS_USAGE_RANGE (1ULL << 10)
0415
0416 #define BTRFS_BALANCE_ARGS_MASK \
0417 (BTRFS_BALANCE_ARGS_PROFILES | \
0418 BTRFS_BALANCE_ARGS_USAGE | \
0419 BTRFS_BALANCE_ARGS_DEVID | \
0420 BTRFS_BALANCE_ARGS_DRANGE | \
0421 BTRFS_BALANCE_ARGS_VRANGE | \
0422 BTRFS_BALANCE_ARGS_LIMIT | \
0423 BTRFS_BALANCE_ARGS_LIMIT_RANGE | \
0424 BTRFS_BALANCE_ARGS_STRIPES_RANGE | \
0425 BTRFS_BALANCE_ARGS_USAGE_RANGE)
0426
0427
0428
0429
0430
0431
0432 #define BTRFS_BALANCE_ARGS_CONVERT (1ULL << 8)
0433 #define BTRFS_BALANCE_ARGS_SOFT (1ULL << 9)
0434
0435
0436
0437
0438
0439
0440
0441
0442 #define BTRFS_BALANCE_STATE_RUNNING (1ULL << 0)
0443 #define BTRFS_BALANCE_STATE_PAUSE_REQ (1ULL << 1)
0444 #define BTRFS_BALANCE_STATE_CANCEL_REQ (1ULL << 2)
0445
0446 struct btrfs_ioctl_balance_args {
0447 __u64 flags;
0448 __u64 state;
0449
0450 struct btrfs_balance_args data;
0451 struct btrfs_balance_args meta;
0452 struct btrfs_balance_args sys;
0453
0454 struct btrfs_balance_progress stat;
0455
0456 __u64 unused[72];
0457 };
0458
0459 #define BTRFS_INO_LOOKUP_PATH_MAX 4080
0460 struct btrfs_ioctl_ino_lookup_args {
0461 __u64 treeid;
0462 __u64 objectid;
0463 char name[BTRFS_INO_LOOKUP_PATH_MAX];
0464 };
0465
0466 #define BTRFS_INO_LOOKUP_USER_PATH_MAX (4080 - BTRFS_VOL_NAME_MAX - 1)
0467 struct btrfs_ioctl_ino_lookup_user_args {
0468
0469 __u64 dirid;
0470
0471 __u64 treeid;
0472
0473 char name[BTRFS_VOL_NAME_MAX + 1];
0474
0475
0476
0477
0478 char path[BTRFS_INO_LOOKUP_USER_PATH_MAX];
0479 };
0480
0481
0482 struct btrfs_ioctl_search_key {
0483
0484
0485
0486
0487
0488
0489
0490 __u64 tree_id;
0491
0492
0493
0494
0495
0496
0497
0498
0499
0500
0501
0502
0503
0504
0505
0506
0507
0508
0509
0510
0511
0512 __u64 min_objectid;
0513 __u64 max_objectid;
0514 __u64 min_offset;
0515 __u64 max_offset;
0516 __u64 min_transid;
0517 __u64 max_transid;
0518 __u32 min_type;
0519 __u32 max_type;
0520
0521
0522
0523
0524
0525
0526
0527
0528 __u32 nr_items;
0529
0530
0531 __u32 unused;
0532
0533
0534 __u64 unused1;
0535 __u64 unused2;
0536 __u64 unused3;
0537 __u64 unused4;
0538 };
0539
0540 struct btrfs_ioctl_search_header {
0541 __u64 transid;
0542 __u64 objectid;
0543 __u64 offset;
0544 __u32 type;
0545 __u32 len;
0546 };
0547
0548 #define BTRFS_SEARCH_ARGS_BUFSIZE (4096 - sizeof(struct btrfs_ioctl_search_key))
0549
0550
0551
0552
0553
0554 struct btrfs_ioctl_search_args {
0555 struct btrfs_ioctl_search_key key;
0556 char buf[BTRFS_SEARCH_ARGS_BUFSIZE];
0557 };
0558
0559 struct btrfs_ioctl_search_args_v2 {
0560 struct btrfs_ioctl_search_key key;
0561 __u64 buf_size;
0562
0563
0564 __u64 buf[];
0565 };
0566
0567 struct btrfs_ioctl_clone_range_args {
0568 __s64 src_fd;
0569 __u64 src_offset, src_length;
0570 __u64 dest_offset;
0571 };
0572
0573
0574
0575
0576
0577
0578
0579 #define BTRFS_DEFRAG_RANGE_COMPRESS 1
0580 #define BTRFS_DEFRAG_RANGE_START_IO 2
0581 struct btrfs_ioctl_defrag_range_args {
0582
0583 __u64 start;
0584
0585
0586 __u64 len;
0587
0588
0589
0590
0591
0592 __u64 flags;
0593
0594
0595
0596
0597
0598
0599 __u32 extent_thresh;
0600
0601
0602
0603
0604
0605
0606 __u32 compress_type;
0607
0608
0609 __u32 unused[4];
0610 };
0611
0612
0613 #define BTRFS_SAME_DATA_DIFFERS 1
0614
0615 struct btrfs_ioctl_same_extent_info {
0616 __s64 fd;
0617 __u64 logical_offset;
0618 __u64 bytes_deduped;
0619
0620
0621
0622
0623
0624
0625 __s32 status;
0626 __u32 reserved;
0627 };
0628
0629 struct btrfs_ioctl_same_args {
0630 __u64 logical_offset;
0631 __u64 length;
0632 __u16 dest_count;
0633 __u16 reserved1;
0634 __u32 reserved2;
0635 struct btrfs_ioctl_same_extent_info info[];
0636 };
0637
0638 struct btrfs_ioctl_space_info {
0639 __u64 flags;
0640 __u64 total_bytes;
0641 __u64 used_bytes;
0642 };
0643
0644 struct btrfs_ioctl_space_args {
0645 __u64 space_slots;
0646 __u64 total_spaces;
0647 struct btrfs_ioctl_space_info spaces[];
0648 };
0649
0650 struct btrfs_data_container {
0651 __u32 bytes_left;
0652 __u32 bytes_missing;
0653 __u32 elem_cnt;
0654 __u32 elem_missed;
0655 __u64 val[];
0656 };
0657
0658 struct btrfs_ioctl_ino_path_args {
0659 __u64 inum;
0660 __u64 size;
0661 __u64 reserved[4];
0662
0663 __u64 fspath;
0664 };
0665
0666 struct btrfs_ioctl_logical_ino_args {
0667 __u64 logical;
0668 __u64 size;
0669 __u64 reserved[3];
0670 __u64 flags;
0671
0672 __u64 inodes;
0673 };
0674
0675
0676 #define BTRFS_LOGICAL_INO_ARGS_IGNORE_OFFSET (1ULL << 0)
0677
0678 enum btrfs_dev_stat_values {
0679
0680 BTRFS_DEV_STAT_WRITE_ERRS,
0681 BTRFS_DEV_STAT_READ_ERRS,
0682 BTRFS_DEV_STAT_FLUSH_ERRS,
0683
0684
0685 BTRFS_DEV_STAT_CORRUPTION_ERRS,
0686
0687
0688
0689
0690
0691 BTRFS_DEV_STAT_GENERATION_ERRS,
0692
0693
0694 BTRFS_DEV_STAT_VALUES_MAX
0695 };
0696
0697
0698 #define BTRFS_DEV_STATS_RESET (1ULL << 0)
0699
0700 struct btrfs_ioctl_get_dev_stats {
0701 __u64 devid;
0702 __u64 nr_items;
0703 __u64 flags;
0704
0705
0706 __u64 values[BTRFS_DEV_STAT_VALUES_MAX];
0707
0708
0709
0710
0711
0712
0713 __u64 unused[128 - 2 - BTRFS_DEV_STAT_VALUES_MAX];
0714 };
0715
0716 #define BTRFS_QUOTA_CTL_ENABLE 1
0717 #define BTRFS_QUOTA_CTL_DISABLE 2
0718 #define BTRFS_QUOTA_CTL_RESCAN__NOTUSED 3
0719 struct btrfs_ioctl_quota_ctl_args {
0720 __u64 cmd;
0721 __u64 status;
0722 };
0723
0724 struct btrfs_ioctl_quota_rescan_args {
0725 __u64 flags;
0726 __u64 progress;
0727 __u64 reserved[6];
0728 };
0729
0730 struct btrfs_ioctl_qgroup_assign_args {
0731 __u64 assign;
0732 __u64 src;
0733 __u64 dst;
0734 };
0735
0736 struct btrfs_ioctl_qgroup_create_args {
0737 __u64 create;
0738 __u64 qgroupid;
0739 };
0740 struct btrfs_ioctl_timespec {
0741 __u64 sec;
0742 __u32 nsec;
0743 };
0744
0745 struct btrfs_ioctl_received_subvol_args {
0746 char uuid[BTRFS_UUID_SIZE];
0747 __u64 stransid;
0748 __u64 rtransid;
0749 struct btrfs_ioctl_timespec stime;
0750 struct btrfs_ioctl_timespec rtime;
0751 __u64 flags;
0752 __u64 reserved[16];
0753 };
0754
0755
0756
0757
0758
0759
0760 #define BTRFS_SEND_FLAG_NO_FILE_DATA 0x1
0761
0762
0763
0764
0765
0766 #define BTRFS_SEND_FLAG_OMIT_STREAM_HEADER 0x2
0767
0768
0769
0770
0771
0772
0773 #define BTRFS_SEND_FLAG_OMIT_END_CMD 0x4
0774
0775
0776
0777
0778 #define BTRFS_SEND_FLAG_VERSION 0x8
0779
0780
0781
0782
0783
0784
0785 #define BTRFS_SEND_FLAG_COMPRESSED 0x10
0786
0787 #define BTRFS_SEND_FLAG_MASK \
0788 (BTRFS_SEND_FLAG_NO_FILE_DATA | \
0789 BTRFS_SEND_FLAG_OMIT_STREAM_HEADER | \
0790 BTRFS_SEND_FLAG_OMIT_END_CMD | \
0791 BTRFS_SEND_FLAG_VERSION | \
0792 BTRFS_SEND_FLAG_COMPRESSED)
0793
0794 struct btrfs_ioctl_send_args {
0795 __s64 send_fd;
0796 __u64 clone_sources_count;
0797 __u64 __user *clone_sources;
0798 __u64 parent_root;
0799 __u64 flags;
0800 __u32 version;
0801 __u8 reserved[28];
0802 };
0803
0804
0805
0806
0807
0808
0809 struct btrfs_ioctl_get_subvol_info_args {
0810
0811 __u64 treeid;
0812
0813
0814 char name[BTRFS_VOL_NAME_MAX + 1];
0815
0816
0817
0818
0819
0820 __u64 parent_id;
0821
0822
0823
0824
0825
0826 __u64 dirid;
0827
0828
0829 __u64 generation;
0830
0831
0832 __u64 flags;
0833
0834
0835 __u8 uuid[BTRFS_UUID_SIZE];
0836
0837
0838
0839
0840
0841 __u8 parent_uuid[BTRFS_UUID_SIZE];
0842
0843
0844
0845
0846
0847 __u8 received_uuid[BTRFS_UUID_SIZE];
0848
0849
0850 __u64 ctransid;
0851 __u64 otransid;
0852 __u64 stransid;
0853 __u64 rtransid;
0854
0855 struct btrfs_ioctl_timespec ctime;
0856 struct btrfs_ioctl_timespec otime;
0857 struct btrfs_ioctl_timespec stime;
0858 struct btrfs_ioctl_timespec rtime;
0859
0860
0861 __u64 reserved[8];
0862 };
0863
0864 #define BTRFS_MAX_ROOTREF_BUFFER_NUM 255
0865 struct btrfs_ioctl_get_subvol_rootref_args {
0866
0867 __u64 min_treeid;
0868
0869
0870 struct {
0871 __u64 treeid;
0872 __u64 dirid;
0873 } rootref[BTRFS_MAX_ROOTREF_BUFFER_NUM];
0874
0875
0876 __u8 num_items;
0877 __u8 align[7];
0878 };
0879
0880
0881
0882
0883
0884
0885
0886
0887
0888
0889
0890
0891
0892
0893
0894
0895
0896
0897
0898
0899
0900
0901
0902
0903 struct btrfs_ioctl_encoded_io_args {
0904
0905
0906
0907
0908
0909
0910
0911
0912
0913
0914
0915
0916
0917
0918 const struct iovec __user *iov;
0919
0920 unsigned long iovcnt;
0921
0922
0923
0924
0925
0926 __s64 offset;
0927
0928 __u64 flags;
0929
0930
0931
0932
0933
0934
0935
0936
0937
0938
0939
0940
0941
0942
0943
0944 __u64 len;
0945
0946
0947
0948
0949
0950
0951
0952
0953 __u64 unencoded_len;
0954
0955
0956
0957
0958
0959
0960 __u64 unencoded_offset;
0961
0962
0963
0964
0965
0966 __u32 compression;
0967
0968 __u32 encryption;
0969
0970
0971
0972
0973
0974
0975
0976
0977
0978
0979 __u8 reserved[64];
0980 };
0981
0982
0983 #define BTRFS_ENCODED_IO_COMPRESSION_NONE 0
0984
0985 #define BTRFS_ENCODED_IO_COMPRESSION_ZLIB 1
0986
0987
0988
0989
0990 #define BTRFS_ENCODED_IO_COMPRESSION_ZSTD 2
0991
0992
0993
0994
0995
0996
0997 #define BTRFS_ENCODED_IO_COMPRESSION_LZO_4K 3
0998 #define BTRFS_ENCODED_IO_COMPRESSION_LZO_8K 4
0999 #define BTRFS_ENCODED_IO_COMPRESSION_LZO_16K 5
1000 #define BTRFS_ENCODED_IO_COMPRESSION_LZO_32K 6
1001 #define BTRFS_ENCODED_IO_COMPRESSION_LZO_64K 7
1002 #define BTRFS_ENCODED_IO_COMPRESSION_TYPES 8
1003
1004
1005 #define BTRFS_ENCODED_IO_ENCRYPTION_NONE 0
1006 #define BTRFS_ENCODED_IO_ENCRYPTION_TYPES 1
1007
1008
1009 enum btrfs_err_code {
1010 BTRFS_ERROR_DEV_RAID1_MIN_NOT_MET = 1,
1011 BTRFS_ERROR_DEV_RAID10_MIN_NOT_MET,
1012 BTRFS_ERROR_DEV_RAID5_MIN_NOT_MET,
1013 BTRFS_ERROR_DEV_RAID6_MIN_NOT_MET,
1014 BTRFS_ERROR_DEV_TGT_REPLACE,
1015 BTRFS_ERROR_DEV_MISSING_NOT_FOUND,
1016 BTRFS_ERROR_DEV_ONLY_WRITABLE,
1017 BTRFS_ERROR_DEV_EXCL_RUN_IN_PROGRESS,
1018 BTRFS_ERROR_DEV_RAID1C3_MIN_NOT_MET,
1019 BTRFS_ERROR_DEV_RAID1C4_MIN_NOT_MET,
1020 };
1021
1022 #define BTRFS_IOC_SNAP_CREATE _IOW(BTRFS_IOCTL_MAGIC, 1, \
1023 struct btrfs_ioctl_vol_args)
1024 #define BTRFS_IOC_DEFRAG _IOW(BTRFS_IOCTL_MAGIC, 2, \
1025 struct btrfs_ioctl_vol_args)
1026 #define BTRFS_IOC_RESIZE _IOW(BTRFS_IOCTL_MAGIC, 3, \
1027 struct btrfs_ioctl_vol_args)
1028 #define BTRFS_IOC_SCAN_DEV _IOW(BTRFS_IOCTL_MAGIC, 4, \
1029 struct btrfs_ioctl_vol_args)
1030 #define BTRFS_IOC_FORGET_DEV _IOW(BTRFS_IOCTL_MAGIC, 5, \
1031 struct btrfs_ioctl_vol_args)
1032
1033
1034
1035
1036 #define BTRFS_IOC_TRANS_START _IO(BTRFS_IOCTL_MAGIC, 6)
1037 #define BTRFS_IOC_TRANS_END _IO(BTRFS_IOCTL_MAGIC, 7)
1038 #define BTRFS_IOC_SYNC _IO(BTRFS_IOCTL_MAGIC, 8)
1039
1040 #define BTRFS_IOC_CLONE _IOW(BTRFS_IOCTL_MAGIC, 9, int)
1041 #define BTRFS_IOC_ADD_DEV _IOW(BTRFS_IOCTL_MAGIC, 10, \
1042 struct btrfs_ioctl_vol_args)
1043 #define BTRFS_IOC_RM_DEV _IOW(BTRFS_IOCTL_MAGIC, 11, \
1044 struct btrfs_ioctl_vol_args)
1045 #define BTRFS_IOC_BALANCE _IOW(BTRFS_IOCTL_MAGIC, 12, \
1046 struct btrfs_ioctl_vol_args)
1047
1048 #define BTRFS_IOC_CLONE_RANGE _IOW(BTRFS_IOCTL_MAGIC, 13, \
1049 struct btrfs_ioctl_clone_range_args)
1050
1051 #define BTRFS_IOC_SUBVOL_CREATE _IOW(BTRFS_IOCTL_MAGIC, 14, \
1052 struct btrfs_ioctl_vol_args)
1053 #define BTRFS_IOC_SNAP_DESTROY _IOW(BTRFS_IOCTL_MAGIC, 15, \
1054 struct btrfs_ioctl_vol_args)
1055 #define BTRFS_IOC_DEFRAG_RANGE _IOW(BTRFS_IOCTL_MAGIC, 16, \
1056 struct btrfs_ioctl_defrag_range_args)
1057 #define BTRFS_IOC_TREE_SEARCH _IOWR(BTRFS_IOCTL_MAGIC, 17, \
1058 struct btrfs_ioctl_search_args)
1059 #define BTRFS_IOC_TREE_SEARCH_V2 _IOWR(BTRFS_IOCTL_MAGIC, 17, \
1060 struct btrfs_ioctl_search_args_v2)
1061 #define BTRFS_IOC_INO_LOOKUP _IOWR(BTRFS_IOCTL_MAGIC, 18, \
1062 struct btrfs_ioctl_ino_lookup_args)
1063 #define BTRFS_IOC_DEFAULT_SUBVOL _IOW(BTRFS_IOCTL_MAGIC, 19, __u64)
1064 #define BTRFS_IOC_SPACE_INFO _IOWR(BTRFS_IOCTL_MAGIC, 20, \
1065 struct btrfs_ioctl_space_args)
1066 #define BTRFS_IOC_START_SYNC _IOR(BTRFS_IOCTL_MAGIC, 24, __u64)
1067 #define BTRFS_IOC_WAIT_SYNC _IOW(BTRFS_IOCTL_MAGIC, 22, __u64)
1068 #define BTRFS_IOC_SNAP_CREATE_V2 _IOW(BTRFS_IOCTL_MAGIC, 23, \
1069 struct btrfs_ioctl_vol_args_v2)
1070 #define BTRFS_IOC_SUBVOL_CREATE_V2 _IOW(BTRFS_IOCTL_MAGIC, 24, \
1071 struct btrfs_ioctl_vol_args_v2)
1072 #define BTRFS_IOC_SUBVOL_GETFLAGS _IOR(BTRFS_IOCTL_MAGIC, 25, __u64)
1073 #define BTRFS_IOC_SUBVOL_SETFLAGS _IOW(BTRFS_IOCTL_MAGIC, 26, __u64)
1074 #define BTRFS_IOC_SCRUB _IOWR(BTRFS_IOCTL_MAGIC, 27, \
1075 struct btrfs_ioctl_scrub_args)
1076 #define BTRFS_IOC_SCRUB_CANCEL _IO(BTRFS_IOCTL_MAGIC, 28)
1077 #define BTRFS_IOC_SCRUB_PROGRESS _IOWR(BTRFS_IOCTL_MAGIC, 29, \
1078 struct btrfs_ioctl_scrub_args)
1079 #define BTRFS_IOC_DEV_INFO _IOWR(BTRFS_IOCTL_MAGIC, 30, \
1080 struct btrfs_ioctl_dev_info_args)
1081 #define BTRFS_IOC_FS_INFO _IOR(BTRFS_IOCTL_MAGIC, 31, \
1082 struct btrfs_ioctl_fs_info_args)
1083 #define BTRFS_IOC_BALANCE_V2 _IOWR(BTRFS_IOCTL_MAGIC, 32, \
1084 struct btrfs_ioctl_balance_args)
1085 #define BTRFS_IOC_BALANCE_CTL _IOW(BTRFS_IOCTL_MAGIC, 33, int)
1086 #define BTRFS_IOC_BALANCE_PROGRESS _IOR(BTRFS_IOCTL_MAGIC, 34, \
1087 struct btrfs_ioctl_balance_args)
1088 #define BTRFS_IOC_INO_PATHS _IOWR(BTRFS_IOCTL_MAGIC, 35, \
1089 struct btrfs_ioctl_ino_path_args)
1090 #define BTRFS_IOC_LOGICAL_INO _IOWR(BTRFS_IOCTL_MAGIC, 36, \
1091 struct btrfs_ioctl_logical_ino_args)
1092 #define BTRFS_IOC_SET_RECEIVED_SUBVOL _IOWR(BTRFS_IOCTL_MAGIC, 37, \
1093 struct btrfs_ioctl_received_subvol_args)
1094 #define BTRFS_IOC_SEND _IOW(BTRFS_IOCTL_MAGIC, 38, struct btrfs_ioctl_send_args)
1095 #define BTRFS_IOC_DEVICES_READY _IOR(BTRFS_IOCTL_MAGIC, 39, \
1096 struct btrfs_ioctl_vol_args)
1097 #define BTRFS_IOC_QUOTA_CTL _IOWR(BTRFS_IOCTL_MAGIC, 40, \
1098 struct btrfs_ioctl_quota_ctl_args)
1099 #define BTRFS_IOC_QGROUP_ASSIGN _IOW(BTRFS_IOCTL_MAGIC, 41, \
1100 struct btrfs_ioctl_qgroup_assign_args)
1101 #define BTRFS_IOC_QGROUP_CREATE _IOW(BTRFS_IOCTL_MAGIC, 42, \
1102 struct btrfs_ioctl_qgroup_create_args)
1103 #define BTRFS_IOC_QGROUP_LIMIT _IOR(BTRFS_IOCTL_MAGIC, 43, \
1104 struct btrfs_ioctl_qgroup_limit_args)
1105 #define BTRFS_IOC_QUOTA_RESCAN _IOW(BTRFS_IOCTL_MAGIC, 44, \
1106 struct btrfs_ioctl_quota_rescan_args)
1107 #define BTRFS_IOC_QUOTA_RESCAN_STATUS _IOR(BTRFS_IOCTL_MAGIC, 45, \
1108 struct btrfs_ioctl_quota_rescan_args)
1109 #define BTRFS_IOC_QUOTA_RESCAN_WAIT _IO(BTRFS_IOCTL_MAGIC, 46)
1110 #define BTRFS_IOC_GET_FSLABEL FS_IOC_GETFSLABEL
1111 #define BTRFS_IOC_SET_FSLABEL FS_IOC_SETFSLABEL
1112 #define BTRFS_IOC_GET_DEV_STATS _IOWR(BTRFS_IOCTL_MAGIC, 52, \
1113 struct btrfs_ioctl_get_dev_stats)
1114 #define BTRFS_IOC_DEV_REPLACE _IOWR(BTRFS_IOCTL_MAGIC, 53, \
1115 struct btrfs_ioctl_dev_replace_args)
1116 #define BTRFS_IOC_FILE_EXTENT_SAME _IOWR(BTRFS_IOCTL_MAGIC, 54, \
1117 struct btrfs_ioctl_same_args)
1118 #define BTRFS_IOC_GET_FEATURES _IOR(BTRFS_IOCTL_MAGIC, 57, \
1119 struct btrfs_ioctl_feature_flags)
1120 #define BTRFS_IOC_SET_FEATURES _IOW(BTRFS_IOCTL_MAGIC, 57, \
1121 struct btrfs_ioctl_feature_flags[2])
1122 #define BTRFS_IOC_GET_SUPPORTED_FEATURES _IOR(BTRFS_IOCTL_MAGIC, 57, \
1123 struct btrfs_ioctl_feature_flags[3])
1124 #define BTRFS_IOC_RM_DEV_V2 _IOW(BTRFS_IOCTL_MAGIC, 58, \
1125 struct btrfs_ioctl_vol_args_v2)
1126 #define BTRFS_IOC_LOGICAL_INO_V2 _IOWR(BTRFS_IOCTL_MAGIC, 59, \
1127 struct btrfs_ioctl_logical_ino_args)
1128 #define BTRFS_IOC_GET_SUBVOL_INFO _IOR(BTRFS_IOCTL_MAGIC, 60, \
1129 struct btrfs_ioctl_get_subvol_info_args)
1130 #define BTRFS_IOC_GET_SUBVOL_ROOTREF _IOWR(BTRFS_IOCTL_MAGIC, 61, \
1131 struct btrfs_ioctl_get_subvol_rootref_args)
1132 #define BTRFS_IOC_INO_LOOKUP_USER _IOWR(BTRFS_IOCTL_MAGIC, 62, \
1133 struct btrfs_ioctl_ino_lookup_user_args)
1134 #define BTRFS_IOC_SNAP_DESTROY_V2 _IOW(BTRFS_IOCTL_MAGIC, 63, \
1135 struct btrfs_ioctl_vol_args_v2)
1136 #define BTRFS_IOC_ENCODED_READ _IOR(BTRFS_IOCTL_MAGIC, 64, \
1137 struct btrfs_ioctl_encoded_io_args)
1138 #define BTRFS_IOC_ENCODED_WRITE _IOW(BTRFS_IOCTL_MAGIC, 64, \
1139 struct btrfs_ioctl_encoded_io_args)
1140
1141 #endif