hc
2024-05-10 10ebd8556b7990499c896a550e3d416b444211e6
kernel/include/uapi/linux/btrfs.h
....@@ -36,17 +36,22 @@
3636 #define BTRFS_DEVICE_PATH_NAME_MAX 1024
3737 #define BTRFS_SUBVOL_NAME_MAX 4039
3838
39
-#define BTRFS_SUBVOL_CREATE_ASYNC (1ULL << 0)
39
+#ifndef __KERNEL__
40
+/* Deprecated since 5.7 */
41
+# define BTRFS_SUBVOL_CREATE_ASYNC (1ULL << 0)
42
+#endif
4043 #define BTRFS_SUBVOL_RDONLY (1ULL << 1)
4144 #define BTRFS_SUBVOL_QGROUP_INHERIT (1ULL << 2)
4245
4346 #define BTRFS_DEVICE_SPEC_BY_ID (1ULL << 3)
4447
48
+#define BTRFS_SUBVOL_SPEC_BY_ID (1ULL << 4)
49
+
4550 #define BTRFS_VOL_ARG_V2_FLAGS_SUPPORTED \
46
- (BTRFS_SUBVOL_CREATE_ASYNC | \
47
- BTRFS_SUBVOL_RDONLY | \
51
+ (BTRFS_SUBVOL_RDONLY | \
4852 BTRFS_SUBVOL_QGROUP_INHERIT | \
49
- BTRFS_DEVICE_SPEC_BY_ID)
53
+ BTRFS_DEVICE_SPEC_BY_ID | \
54
+ BTRFS_SUBVOL_SPEC_BY_ID)
5055
5156 #define BTRFS_FSID_SIZE 16
5257 #define BTRFS_UUID_SIZE 16
....@@ -97,15 +102,28 @@
97102 };
98103
99104 /*
100
- * flags for subvolumes
105
+ * Arguments for specification of subvolumes or devices, supporting by-name or
106
+ * by-id and flags
101107 *
102
- * Used by:
103
- * struct btrfs_ioctl_vol_args_v2.flags
108
+ * The set of supported flags depends on the ioctl
104109 *
105110 * BTRFS_SUBVOL_RDONLY is also provided/consumed by the following ioctls:
106111 * - BTRFS_IOC_SUBVOL_GETFLAGS
107112 * - BTRFS_IOC_SUBVOL_SETFLAGS
108113 */
114
+
115
+/* Supported flags for BTRFS_IOC_RM_DEV_V2 */
116
+#define BTRFS_DEVICE_REMOVE_ARGS_MASK \
117
+ (BTRFS_DEVICE_SPEC_BY_ID)
118
+
119
+/* Supported flags for BTRFS_IOC_SNAP_CREATE_V2 and BTRFS_IOC_SUBVOL_CREATE_V2 */
120
+#define BTRFS_SUBVOL_CREATE_ARGS_MASK \
121
+ (BTRFS_SUBVOL_RDONLY | \
122
+ BTRFS_SUBVOL_QGROUP_INHERIT)
123
+
124
+/* Supported flags for BTRFS_IOC_SNAP_DESTROY_V2 */
125
+#define BTRFS_SUBVOL_DELETE_ARGS_MASK \
126
+ (BTRFS_SUBVOL_SPEC_BY_ID)
109127
110128 struct btrfs_ioctl_vol_args_v2 {
111129 __s64 fd;
....@@ -121,6 +139,7 @@
121139 union {
122140 char name[BTRFS_SUBVOL_NAME_MAX + 1];
123141 __u64 devid;
142
+ __u64 subvolid;
124143 };
125144 };
126145
....@@ -162,6 +181,7 @@
162181 };
163182
164183 #define BTRFS_SCRUB_READONLY 1
184
+#define BTRFS_SCRUB_SUPPORTED_FLAGS (BTRFS_SCRUB_READONLY)
165185 struct btrfs_ioctl_scrub_args {
166186 __u64 devid; /* in */
167187 __u64 start; /* in */
....@@ -224,6 +244,18 @@
224244 __u8 path[BTRFS_DEVICE_PATH_NAME_MAX]; /* out */
225245 };
226246
247
+/*
248
+ * Retrieve information about the filesystem
249
+ */
250
+
251
+/* Request information about checksum type and size */
252
+#define BTRFS_FS_INFO_FLAG_CSUM_INFO (1 << 0)
253
+
254
+/* Request information about filesystem generation */
255
+#define BTRFS_FS_INFO_FLAG_GENERATION (1 << 1)
256
+/* Request information about filesystem metadata UUID */
257
+#define BTRFS_FS_INFO_FLAG_METADATA_UUID (1 << 2)
258
+
227259 struct btrfs_ioctl_fs_info_args {
228260 __u64 max_id; /* out */
229261 __u64 num_devices; /* out */
....@@ -231,8 +263,13 @@
231263 __u32 nodesize; /* out */
232264 __u32 sectorsize; /* out */
233265 __u32 clone_alignment; /* out */
234
- __u32 reserved32;
235
- __u64 reserved[122]; /* pad to 1k */
266
+ /* See BTRFS_FS_INFO_FLAG_* */
267
+ __u16 csum_type; /* out */
268
+ __u16 csum_size; /* out */
269
+ __u64 flags; /* in/out */
270
+ __u64 generation; /* out */
271
+ __u8 metadata_uuid[BTRFS_FSID_SIZE]; /* out */
272
+ __u8 reserved[944]; /* pad to 1k */
236273 };
237274
238275 /*
....@@ -269,6 +306,8 @@
269306 #define BTRFS_FEATURE_INCOMPAT_RAID56 (1ULL << 7)
270307 #define BTRFS_FEATURE_INCOMPAT_SKINNY_METADATA (1ULL << 8)
271308 #define BTRFS_FEATURE_INCOMPAT_NO_HOLES (1ULL << 9)
309
+#define BTRFS_FEATURE_INCOMPAT_METADATA_UUID (1ULL << 10)
310
+#define BTRFS_FEATURE_INCOMPAT_RAID1C34 (1ULL << 11)
272311
273312 struct btrfs_ioctl_feature_flags {
274313 __u64 compat_flags;
....@@ -664,7 +703,12 @@
664703 /* out values: */
665704 __u64 values[BTRFS_DEV_STAT_VALUES_MAX];
666705
667
- __u64 unused[128 - 2 - BTRFS_DEV_STAT_VALUES_MAX]; /* pad to 1k */
706
+ /*
707
+ * This pads the struct to 1032 bytes. It was originally meant to pad to
708
+ * 1024 bytes, but when adding the flags field, the padding calculation
709
+ * was not adjusted.
710
+ */
711
+ __u64 unused[128 - 2 - BTRFS_DEV_STAT_VALUES_MAX];
668712 };
669713
670714 #define BTRFS_QUOTA_CTL_ENABLE 1
....@@ -825,7 +869,9 @@
825869 BTRFS_ERROR_DEV_TGT_REPLACE,
826870 BTRFS_ERROR_DEV_MISSING_NOT_FOUND,
827871 BTRFS_ERROR_DEV_ONLY_WRITABLE,
828
- BTRFS_ERROR_DEV_EXCL_RUN_IN_PROGRESS
872
+ BTRFS_ERROR_DEV_EXCL_RUN_IN_PROGRESS,
873
+ BTRFS_ERROR_DEV_RAID1C3_MIN_NOT_MET,
874
+ BTRFS_ERROR_DEV_RAID1C4_MIN_NOT_MET,
829875 };
830876
831877 #define BTRFS_IOC_SNAP_CREATE _IOW(BTRFS_IOCTL_MAGIC, 1, \
....@@ -835,6 +881,8 @@
835881 #define BTRFS_IOC_RESIZE _IOW(BTRFS_IOCTL_MAGIC, 3, \
836882 struct btrfs_ioctl_vol_args)
837883 #define BTRFS_IOC_SCAN_DEV _IOW(BTRFS_IOCTL_MAGIC, 4, \
884
+ struct btrfs_ioctl_vol_args)
885
+#define BTRFS_IOC_FORGET_DEV _IOW(BTRFS_IOCTL_MAGIC, 5, \
838886 struct btrfs_ioctl_vol_args)
839887 /* trans start and trans end are dangerous, and only for
840888 * use by applications that know how to avoid the
....@@ -914,10 +962,8 @@
914962 #define BTRFS_IOC_QUOTA_RESCAN_STATUS _IOR(BTRFS_IOCTL_MAGIC, 45, \
915963 struct btrfs_ioctl_quota_rescan_args)
916964 #define BTRFS_IOC_QUOTA_RESCAN_WAIT _IO(BTRFS_IOCTL_MAGIC, 46)
917
-#define BTRFS_IOC_GET_FSLABEL _IOR(BTRFS_IOCTL_MAGIC, 49, \
918
- char[BTRFS_LABEL_SIZE])
919
-#define BTRFS_IOC_SET_FSLABEL _IOW(BTRFS_IOCTL_MAGIC, 50, \
920
- char[BTRFS_LABEL_SIZE])
965
+#define BTRFS_IOC_GET_FSLABEL FS_IOC_GETFSLABEL
966
+#define BTRFS_IOC_SET_FSLABEL FS_IOC_SETFSLABEL
921967 #define BTRFS_IOC_GET_DEV_STATS _IOWR(BTRFS_IOCTL_MAGIC, 52, \
922968 struct btrfs_ioctl_get_dev_stats)
923969 #define BTRFS_IOC_DEV_REPLACE _IOWR(BTRFS_IOCTL_MAGIC, 53, \
....@@ -940,5 +986,7 @@
940986 struct btrfs_ioctl_get_subvol_rootref_args)
941987 #define BTRFS_IOC_INO_LOOKUP_USER _IOWR(BTRFS_IOCTL_MAGIC, 62, \
942988 struct btrfs_ioctl_ino_lookup_user_args)
989
+#define BTRFS_IOC_SNAP_DESTROY_V2 _IOW(BTRFS_IOCTL_MAGIC, 63, \
990
+ struct btrfs_ioctl_vol_args_v2)
943991
944992 #endif /* _UAPI_LINUX_BTRFS_H */