aboutsummaryrefslogtreecommitdiffstats
path: root/sys/linux
diff options
context:
space:
mode:
authorJiaheng Hu <jiahengh@google.com>2020-07-28 22:44:47 +0000
committerEric Biggers <ebiggers3@gmail.com>2020-08-19 09:29:36 -0700
commited282a3a908662a18525a686f2adfa76731df95e (patch)
tree35b267928278f318416e8b536a68aede28f6b008 /sys/linux
parent94b457068cf474d9fcbfc5ca4cdb71b346166187 (diff)
sys/linux: add BTRFS specific ioctls
Add the ioctls specific to BTRFS (linux v5.8).
Diffstat (limited to 'sys/linux')
-rw-r--r--sys/linux/fs_ioctl_btrfs.txt448
-rw-r--r--sys/linux/fs_ioctl_btrfs.txt.const123
2 files changed, 562 insertions, 9 deletions
diff --git a/sys/linux/fs_ioctl_btrfs.txt b/sys/linux/fs_ioctl_btrfs.txt
index b31ac5156..8e5a33ea3 100644
--- a/sys/linux/fs_ioctl_btrfs.txt
+++ b/sys/linux/fs_ioctl_btrfs.txt
@@ -1,7 +1,449 @@
-# Copyright 2018 syzkaller project authors. All rights reserved.
+# Copyright 2020 syzkaller project authors. All rights reserved.
# Use of this source code is governed by Apache 2 LICENSE that can be found in the LICENSE file.
include <uapi/linux/btrfs.h>
+include <uapi/linux/btrfs_tree.h>
+include <linux/refcount.h>
+include <linux/spinlock_types.h>
+include <linux/types.h>
+include <linux/blk_types.h>
+include <linux/wait.h>
+include <fs/btrfs/compression.h>
-# TODO: add the ioctls
-_ = BTRFS_IOC_SNAP_CREATE, BTRFS_IOC_DEFRAG, BTRFS_IOC_RESIZE, BTRFS_IOC_SCAN_DEV, BTRFS_IOC_TRANS_START, BTRFS_IOC_TRANS_END, BTRFS_IOC_SYNC, BTRFS_IOC_CLONE, BTRFS_IOC_ADD_DEV, BTRFS_IOC_RM_DEV, BTRFS_IOC_BALANCE, BTRFS_IOC_CLONE_RANGE, BTRFS_IOC_SUBVOL_CREATE, BTRFS_IOC_SNAP_DESTROY, BTRFS_IOC_FILE_EXTENT_SAME
+ioctl$BTRFS_IOC_SNAP_CREATE(fd fd, cmd const[BTRFS_IOC_SNAP_CREATE], arg ptr[in, btrfs_ioctl_vol_args])
+ioctl$BTRFS_IOC_SNAP_CREATE_V2(fd fd, cmd const[BTRFS_IOC_SNAP_CREATE_V2], arg ptr[in, btrfs_ioctl_vol_args_v2])
+ioctl$BTRFS_IOC_SUBVOL_CREATE(fd fd, cmd const[BTRFS_IOC_SUBVOL_CREATE], arg ptr[in, btrfs_ioctl_vol_args])
+ioctl$BTRFS_IOC_SUBVOL_CREATE_V2(fd fd, cmd const[BTRFS_IOC_SUBVOL_CREATE_V2], arg ptr[in, btrfs_ioctl_vol_args_v2])
+ioctl$BTRFS_IOC_SNAP_DESTROY(fd fd, cmd const[BTRFS_IOC_SNAP_DESTROY], arg ptr[in, btrfs_ioctl_vol_args])
+ioctl$BTRFS_IOC_SNAP_DESTROY_V2(fd fd, cmd const[BTRFS_IOC_SNAP_DESTROY_V2], arg ptr[in, btrfs_ioctl_vol_args_v2])
+ioctl$BTRFS_IOC_SUBVOL_GETFLAGS(fd fd, cmd const[BTRFS_IOC_SUBVOL_GETFLAGS], arg ptr[out, int64])
+ioctl$BTRFS_IOC_SUBVOL_SETFLAGS(fd fd, cmd const[BTRFS_IOC_SUBVOL_SETFLAGS], arg ptr[in, flags[btrfs_subvol_flags, int64]])
+ioctl$BTRFS_IOC_DEFAULT_SUBVOL(fd fd, cmd const[BTRFS_IOC_DEFAULT_SUBVOL], arg ptr[in, subvolid])
+ioctl$BTRFS_IOC_DEFRAG(fd fd, cmd const[BTRFS_IOC_DEFRAG], arg const[0])
+ioctl$BTRFS_IOC_DEFRAG_RANGE(fd fd, cmd const[BTRFS_IOC_DEFRAG_RANGE], arg ptr[in, btrfs_ioctl_defrag_range_args, opt])
+ioctl$BTRFS_IOC_RESIZE(fd fd, cmd const[BTRFS_IOC_RESIZE], arg ptr[in, btrfs_ioctl_resize_args])
+ioctl$BTRFS_IOC_ADD_DEV(fd fd, cmd const[BTRFS_IOC_ADD_DEV], arg ptr[in, btrfs_ioctl_vol_args])
+ioctl$BTRFS_IOC_RM_DEV(fd fd, cmd const[BTRFS_IOC_RM_DEV], arg ptr[in, btrfs_ioctl_vol_args])
+ioctl$BTRFS_IOC_RM_DEV_V2(fd fd, cmd const[BTRFS_IOC_RM_DEV_V2], arg ptr[in, btrfs_ioctl_vol_args_v2])
+ioctl$BTRFS_IOC_FS_INFO(fd fd, cmd const[BTRFS_IOC_FS_INFO], arg ptr[out, btrfs_ioctl_fs_info_args])
+ioctl$BTRFS_IOC_DEV_INFO(fd fd, cmd const[BTRFS_IOC_DEV_INFO], arg ptr[inout, btrfs_ioctl_dev_info_args])
+ioctl$BTRFS_IOC_BALANCE(fd fd, cmd const[BTRFS_IOC_BALANCE], arg const[0])
+ioctl$BTRFS_IOC_TREE_SEARCH(fd fd, cmd const[BTRFS_IOC_TREE_SEARCH], arg ptr[inout, btrfs_ioctl_search_args])
+ioctl$BTRFS_IOC_TREE_SEARCH_V2(fd fd, cmd const[BTRFS_IOC_TREE_SEARCH_V2], arg ptr[inout, btrfs_ioctl_search_args_v2])
+ioctl$BTRFS_IOC_INO_LOOKUP(fd fd, cmd const[BTRFS_IOC_INO_LOOKUP], arg ptr[in, btrfs_ioctl_ino_lookup_args])
+ioctl$BTRFS_IOC_INO_PATHS(fd fd, cmd const[BTRFS_IOC_INO_PATHS], arg ptr[inout, btrfs_ioctl_ino_path_args])
+ioctl$BTRFS_IOC_LOGICAL_INO(fd fd, cmd const[BTRFS_IOC_LOGICAL_INO], arg ptr[inout, btrfs_ioctl_logical_ino_args])
+ioctl$BTRFS_IOC_LOGICAL_INO_V2(fd fd, cmd const[BTRFS_IOC_LOGICAL_INO_V2], arg ptr[inout, btrfs_ioctl_logical_ino_args])
+ioctl$BTRFS_IOC_SPACE_INFO(fd fd, cmd const[BTRFS_IOC_SPACE_INFO], arg ptr[inout, btrfs_ioctl_space_args])
+ioctl$BTRFS_IOC_SYNC(fd fd, cmd const[BTRFS_IOC_SYNC], arg const[0])
+ioctl$BTRFS_IOC_START_SYNC(fd fd, cmd const[BTRFS_IOC_START_SYNC], arg ptr[out, transid])
+ioctl$BTRFS_IOC_WAIT_SYNC(fd fd, cmd const[BTRFS_IOC_WAIT_SYNC], arg ptr[in, transid, opt])
+ioctl$BTRFS_IOC_SCRUB(fd fd, cmd const[BTRFS_IOC_SCRUB], arg ptr[inout, btrfs_ioctl_scrub_args])
+ioctl$BTRFS_IOC_SCRUB_CANCEL(fd fd, cmd const[BTRFS_IOC_SCRUB_CANCEL], arg const[0])
+ioctl$BTRFS_IOC_SCRUB_PROGRESS(fd fd, cmd const[BTRFS_IOC_SCRUB_PROGRESS], arg ptr[inout, btrfs_ioctl_scrub_args])
+ioctl$BTRFS_IOC_BALANCE_V2(fd fd, cmd const[BTRFS_IOC_BALANCE_V2], arg ptr[inout, btrfs_ioctl_balance_args])
+ioctl$BTRFS_IOC_BALANCE_CTL(fd fd, cmd const[BTRFS_IOC_BALANCE_CTL], arg flags[btrfs_balance_ctl_values])
+ioctl$BTRFS_IOC_BALANCE_PROGRESS(fd fd, cmd const[BTRFS_IOC_BALANCE_PROGRESS], arg ptr[out, btrfs_ioctl_balance_args])
+ioctl$BTRFS_IOC_SET_RECEIVED_SUBVOL(fd fd, cmd const[BTRFS_IOC_SET_RECEIVED_SUBVOL], arg ptr[inout, btrfs_ioctl_received_subvol_args])
+ioctl$BTRFS_IOC_SEND(fd fd, cmd const[BTRFS_IOC_SEND], arg ptr[in, btrfs_ioctl_send_args])
+ioctl$BTRFS_IOC_GET_DEV_STATS(fd fd, cmd const[BTRFS_IOC_GET_DEV_STATS], arg ptr[inout, btrfs_ioctl_get_dev_stats])
+ioctl$BTRFS_IOC_QUOTA_CTL(fd fd, cmd const[BTRFS_IOC_QUOTA_CTL], arg ptr[in, btrfs_ioctl_quota_ctl_args])
+ioctl$BTRFS_IOC_QGROUP_ASSIGN(fd fd, cmd const[BTRFS_IOC_QGROUP_ASSIGN], arg ptr[in, btrfs_ioctl_qgroup_assign_args])
+ioctl$BTRFS_IOC_QGROUP_CREATE(fd fd, cmd const[BTRFS_IOC_QGROUP_CREATE], arg ptr[in, btrfs_ioctl_qgroup_create_args])
+ioctl$BTRFS_IOC_QGROUP_LIMIT(fd fd, cmd const[BTRFS_IOC_QGROUP_LIMIT], arg ptr[in, btrfs_ioctl_qgroup_limit_args])
+ioctl$BTRFS_IOC_QUOTA_RESCAN(fd fd, cmd const[BTRFS_IOC_QUOTA_RESCAN], arg ptr[in, btrfs_ioctl_quota_rescan_args])
+ioctl$BTRFS_IOC_QUOTA_RESCAN_STATUS(fd fd, cmd const[BTRFS_IOC_QUOTA_RESCAN_STATUS], arg ptr[out, btrfs_ioctl_quota_rescan_args])
+ioctl$BTRFS_IOC_QUOTA_RESCAN_WAIT(fd fd, cmd const[BTRFS_IOC_QUOTA_RESCAN_WAIT], arg const[0])
+ioctl$BTRFS_IOC_DEV_REPLACE(fd fd, cmd const[BTRFS_IOC_DEV_REPLACE], arg ptr[inout, btrfs_ioctl_dev_replace_args])
+ioctl$BTRFS_IOC_GET_SUPPORTED_FEATURES(fd fd, cmd const[BTRFS_IOC_GET_SUPPORTED_FEATURES], arg ptr[out, array[btrfs_ioctl_feature_flags, 3]])
+ioctl$BTRFS_IOC_GET_FEATURES(fd fd, cmd const[BTRFS_IOC_GET_FEATURES], arg ptr[out, btrfs_ioctl_feature_flags])
+ioctl$BTRFS_IOC_SET_FEATURES(fd fd, cmd const[BTRFS_IOC_SET_FEATURES], arg ptr[in, btrfs_ioctl_feature_flags])
+ioctl$BTRFS_IOC_GET_SUBVOL_INFO(fd fd, cmd const[BTRFS_IOC_GET_SUBVOL_INFO], arg ptr[out, btrfs_ioctl_get_subvol_info_args])
+ioctl$BTRFS_IOC_GET_SUBVOL_ROOTREF(fd fd, cmd const[BTRFS_IOC_GET_SUBVOL_ROOTREF], arg ptr[inout, btrfs_ioctl_get_subvol_rootref_args])
+ioctl$BTRFS_IOC_INO_LOOKUP_USER(fd fd, cmd const[BTRFS_IOC_INO_LOOKUP_USER], arg ptr[inout, btrfs_ioctl_ino_lookup_user_args])
+
+resource transid[int64]
+resource devid[int64]
+resource treeid[int64]
+resource dirid[int64]
+# These should be a resource but it's not returned by any syscall. So we temporarily describe them as type
+type qgroupid int64
+type objectid int64
+type subvolid objectid
+#NEED: uuid should be a resource
+
+define BTRFS_PATH_MAX BTRFS_PATH_NAME_MAX+1
+define BTRFS_SUBVOL_MAX BTRFS_SUBVOL_NAME_MAX+1
+
+#The following two struct needs to be customized to fit the need of each specific ioctls calling them
+#But I still need more information in order to make the change
+btrfs_ioctl_vol_args {
+ fd align64[fd]
+ name array[int8, BTRFS_PATH_MAX]
+}
+
+btrfs_ioctl_vol_args_v2 {
+ fd align64[fd]
+ transid transid
+ flags flags[btrfs_ioctl_vol_args_v2_flags, int64]
+ u1 btrfs_vol_args_v2_u1
+ u2 btrfs_vol_args_v2_u2
+}
+
+btrfs_vol_args_v2_u1 [
+ inherit btrfs_vol_args_v2_u1_s1
+ unused array[int64, 4]
+]
+
+btrfs_vol_args_v2_u2 [
+ name array[int8, BTRFS_SUBVOL_MAX]
+ devid devid
+ subvolid subvolid
+]
+
+btrfs_vol_args_v2_u1_s1 {
+ size bytesize[qgroup_inherit, int64]
+ qgroup_inherit ptr[in, btrfs_qgroup_inherit]
+}
+
+btrfs_qgroup_inherit {
+ flags flags[btrfs_qgroup_inherit_flags, int64]
+ num_qgroups len[qgroups, int64]
+ num_ref_copies int64
+ num_excl_copies int64
+ lim btrfs_qgroup_limit
+ qgroups array[qgroupid]
+}
+
+btrfs_qgroup_limit {
+ flags flags[btrfs_qgroup_limit_flags, int64]
+ max_rfer int64
+ max_excl int64
+ rsv_rfer int64
+ rsv_excl int64
+}
+
+btrfs_ioctl_defrag_range_args {
+ start int64
+ len int64
+ flags flags[btrfs_ioctl_defrag_range_args_flags, int64]
+ extent_thresh int32
+ compress_type flags[btrfs_compression_type, int32]
+ unused array[int32, 4]
+}
+
+btrfs_ioctl_fs_info_args {
+ max_id const[0, int64]
+ num_devices const[0, int64]
+ fsid array[const[0, int8], BTRFS_FSID_SIZE]
+ nodesize const[0, int32]
+ sectorize const[0, int32]
+ clone_alignment const[0, int32]
+ reserved32 const[0, int32]
+ reserved array[const[0, int64], 122]
+}
+
+btrfs_ioctl_dev_info_args {
+ devid devid
+ uuid array[int8, BTRFS_UUID_SIZE]
+ bytes_used const[0, int64]
+ total_bytes const[0, int64]
+ unused array[const[0, int64], 379]
+ path array[const[0, int8], BTRFS_DEVICE_PATH_NAME_MAX]
+}
+
+btrfs_ioctl_search_args {
+ key btrfs_ioctl_search_key
+ buf array[const[0, int8], BTRFS_SEARCH_ARGS_BUFSIZE]
+}
+
+btrfs_ioctl_search_key {
+ tree_id treeid
+ min_objectid int64
+ max_objectid int64
+ min_offset int64
+ max_offset int64
+ min_transid int64
+ max_transid int64
+ min_type int32
+ max_type int32
+ nr_items int32
+ unused int32
+ unused1 int64
+ unused2 int64
+ unused3 int64
+ unused4 int64
+}
+
+btrfs_ioctl_search_args_v2 {
+ key btrfs_ioctl_search_key
+ buf_size bytesize[buf, int64]
+ buf array[const[0, int64]]
+}
+
+btrfs_ioctl_ino_lookup_args {
+ treeid treeid
+ objectid objectid
+ name array[const[0, int8], BTRFS_INO_LOOKUP_PATH_MAX]
+}
+
+btrfs_ioctl_ino_path_args {
+ inum int64
+ size bytesize[fspath, int64]
+ reserved array[int64, 4]
+ fspath ptr64[out, array[const[0, int64]]]
+}
+
+btrfs_ioctl_logical_ino_args {
+ logical int64
+ size bytesize[inodes, int64]
+ reserved array[const[0, int64], 3]
+ flags flags[btrfs_ioctl_logical_ino_args_flags, int64]
+ inodes ptr64[out, array[const[0, int64]]]
+}
+
+btrfs_ioctl_space_args {
+ space_slots len[spaces, int64]
+ total_spaces int64
+ spaces array[array[const[0, int64], 3], 0:4096]
+}
+
+# btrfs_scrub_progress is ignored since that will only be used for out
+btrfs_ioctl_scrub_args {
+ devid devid
+ start int64
+ end int64
+ flags flags[btrfs_ioctl_scrub_args_flags, int64]
+ unused array[const[0, int64], 124]
+}
+
+btrfs_ioctl_balance_args {
+ flags flags[btrfs_ioctl_balance_args_flags, int64]
+ state flags[btrfs_ioctl_balance_args_states, int64]
+ data btrfs_balance_args
+ meta btrfs_balance_args
+ sys btrfs_balance_args
+ stat btrfs_balance_progress
+ unused array[const[0, int64], 72]
+}
+
+btrfs_balance_args_u [
+ usage int64
+ struct btrfs_balance_args_u_s1
+]
+
+btrfs_balance_args_u_s1 {
+ usage_min int32
+ usage_max int32
+}
+
+btrfs_balance_args {
+ profiles int64
+ union1 btrfs_balance_args_u
+ devid devid
+ pstart int64
+ pend int64
+ vstart int64
+ vend int64
+ target int64
+ flags flags[btrfs_balance_args_flags, int64]
+ union2 btrfs_balance_args_u
+ stripes_min int32
+ stripes_max int32
+ unused array[int64, 6]
+} [packed]
+
+btrfs_balance_progress {
+ expected int64
+ considered int64
+ completed int64
+}
+
+btrfs_ioctl_received_subvol_args {
+ uuid array[int8, BTRFS_UUID_SIZE]
+ stransid transid
+ rtransid transid
+ stime btrfs_ioctl_timespec
+ rtime btrfs_ioctl_timespec
+ flags int64
+ reserved array[int64, 16]
+}
+
+btrfs_ioctl_timespec {
+ sec int64
+ msec int32
+}
+
+btrfs_ioctl_send_args {
+ send_fd align64[fd]
+ clone_sources_count len[clone_sources, int64]
+ clone_sources ptr[in, array[subvolid]]
+ parent_root int64
+ flags flags[btrfs_ioctl_send_flags, int64]
+ reserved array[int64, 4]
+}
+
+#This pads the struct to 1032 bytes. It was originally meant to pad to
+#1024 bytes, but when adding the flags field, the padding calculation
+#was not adjusted.
+define BTRFS_DEV_PAD 128-2-BTRFS_DEV_STAT_VALUES_MAX
+
+btrfs_ioctl_get_dev_stats {
+ devid devid
+ nr_items int64
+ flags flags[btrfs_ioctl_get_dev_stats_flags, int64]
+ values array[int64, BTRFS_DEV_STAT_VALUES_MAX]
+ unused array[int64, BTRFS_DEV_PAD]
+}
+
+btrfs_ioctl_quota_ctl_args {
+ cmd flags[btrfs_ioctl_quota_ctl_cmd, int64]
+ status int64
+}
+
+btrfs_ioctl_qgroup_assign_args {
+ assign bool64
+ src qgroupid
+ dst qgroupid
+}
+
+btrfs_ioctl_qgroup_create_args {
+ create bool64
+ qgroupid qgroupid
+}
+
+btrfs_ioctl_qgroup_limit_args {
+ qgroupid qgroupid
+ lim btrfs_qgroup_limit
+}
+
+btrfs_ioctl_quota_rescan_args {
+ flags const[0, int64]
+ progress int64
+ reserved array[int64, 6]
+}
+
+btrfs_ioctl_dev_replace_args_u [
+ start btrfs_ioctl_dev_replace_start_params
+ status btrfs_ioctl_dev_replace_status_params
+]
+
+btrfs_ioctl_dev_replace_args {
+ cmd flags[btrfs_ioctl_dev_replace_args_cmd, int64]
+ result int64
+ union1 btrfs_ioctl_dev_replace_args_u
+ spare array[int64, 64]
+}
+
+define BTRFS_DEVICE_MAX BTRFS_DEVICE_PATH_NAME_MAX + 1
+
+btrfs_ioctl_dev_replace_start_params {
+ srcdevid devid
+ cont_reading_from_srcdev_mode flags[cont_reading_from_srcdev_mode_flags, int64]
+ srcdev_name array[int8, BTRFS_DEVICE_MAX]
+ tgtdev_name array[int8, BTRFS_DEVICE_MAX]
+}
+
+#this structure is just for out, hence no need to describe
+btrfs_ioctl_dev_replace_status_params {
+ dummys array[int64, 6]
+}
+
+btrfs_ioctl_feature_flags {
+ compat_flags flags[btrfs_ioctl_feature_compat_flags, int64]
+ compat_ro_flags flags[btrfs_ioctl_feature_compat_ro_flags, int64]
+ incompat_flags flags[btrfs_ioctl_feature_incompat_flags, int64]
+}
+
+define BTRFS_VOL_MAX BTRFS_VOL_NAME_MAX+1
+
+#described since the uuid, transid and treeid is going to be useful as resource
+btrfs_ioctl_get_subvol_info_args {
+ treeid treeid
+ name array[int8, BTRFS_VOL_MAX]
+ parent_id treeid
+ dirid dirid
+ generation transid
+ flags int64
+ uuid array[int8, BTRFS_UUID_SIZE]
+ parent_uuid array[int8, BTRFS_UUID_SIZE]
+ received_uuid array[int8, BTRFS_UUID_SIZE]
+ ctransid transid
+ otransid transid
+ stransid transid
+ rtransid transid
+ ctime btrfs_ioctl_timespec
+ otime btrfs_ioctl_timespec
+ stime btrfs_ioctl_timespec
+ rtime btrfs_ioctl_timespec
+ reserved array[const[0, int64], 8]
+}
+
+btrfs_ioctl_get_subvol_rootref_args {
+ min_treeid int64
+ rootref array[btrfs_ioctl_get_subvol_rootref_args_s1, BTRFS_MAX_ROOTREF_BUFFER_NUM]
+ num_items int8
+ align array[int8, 7]
+}
+
+btrfs_ioctl_get_subvol_rootref_args_s1 {
+ treeid treeid
+ dirid dirid
+}
+
+btrfs_ioctl_ino_lookup_user_args {
+ dirid dirid
+ treeid treeid
+ name array[int8, BTRFS_VOL_MAX]
+ path array[int8, BTRFS_INO_LOOKUP_USER_PATH_MAX]
+}
+
+btrfs_ioctl_resize_args {
+ fd align64[fd]
+ name btrfs_ioctl_resize_string
+}
+
+btrfs_ioctl_resize_string {
+ devid optional[btrfs_devid_colon]
+ resize_num btrfs_ioctl_resize_size
+} [packed]
+
+btrfs_devid_colon {
+ devid fmt[dec, devid]
+ colon const[':', int8]
+}
+
+btrfs_ioctl_resize_size [
+ actul_num btrfs_ioctl_resize_size_num
+ max stringnoz["max"]
+] [varlen]
+
+btrfs_ioctl_resize_size_num {
+ plus_minus optional[flags[plus_minus, int8]]
+ num fmt[dec, int32]
+ kKmM flags[all_these_kKmM, int8]
+} [packed]
+
+plus_minus = '+', '-'
+all_these_kKmM = 'k', 'K', 'm', 'M', 'g', 'G', 't', 'T', 'p', 'P', 'e', 'E'
+
+btrfs_ioctl_vol_args_v2_flags = BTRFS_SUBVOL_RDONLY, BTRFS_SUBVOL_QGROUP_INHERIT, BTRFS_DEVICE_SPEC_BY_ID, BTRFS_SUBVOL_SPEC_BY_ID
+btrfs_qgroup_inherit_flags = BTRFS_QGROUP_INHERIT_SET_LIMITS
+btrfs_qgroup_limit_flags = BTRFS_QGROUP_LIMIT_MAX_RFER, BTRFS_QGROUP_LIMIT_MAX_EXCL, BTRFS_QGROUP_LIMIT_RSV_RFER, BTRFS_QGROUP_LIMIT_RSV_EXCL, BTRFS_QGROUP_LIMIT_RFER_CMPR, BTRFS_QGROUP_LIMIT_EXCL_CMPR
+btrfs_subvol_flags = BTRFS_SUBVOL_RDONLY
+btrfs_ioctl_defrag_range_args_flags = BTRFS_DEFRAG_RANGE_COMPRESS, BTRFS_DEFRAG_RANGE_START_IO
+btrfs_compression_type = BTRFS_COMPRESS_NONE, BTRFS_COMPRESS_ZLIB, BTRFS_COMPRESS_LZO, BTRFS_COMPRESS_ZSTD
+btrfs_ioctl_logical_ino_args_flags = BTRFS_LOGICAL_INO_ARGS_IGNORE_OFFSET
+btrfs_ioctl_scrub_args_flags = BTRFS_SCRUB_READONLY
+btrfs_balance_ctl_values = BTRFS_BALANCE_CTL_PAUSE, BTRFS_BALANCE_CTL_CANCEL
+btrfs_balance_args_flags = BTRFS_BALANCE_ARGS_PROFILES, BTRFS_BALANCE_ARGS_USAGE, BTRFS_BALANCE_ARGS_DEVID, BTRFS_BALANCE_ARGS_DRANGE, BTRFS_BALANCE_ARGS_VRANGE, BTRFS_BALANCE_ARGS_LIMIT, BTRFS_BALANCE_ARGS_LIMIT_RANGE, BTRFS_BALANCE_ARGS_STRIPES_RANGE, BTRFS_BALANCE_ARGS_USAGE_RANGE
+btrfs_ioctl_balance_args_states = BTRFS_BALANCE_STATE_RUNNING, BTRFS_BALANCE_STATE_PAUSE_REQ, BTRFS_BALANCE_STATE_CANCEL_REQ
+btrfs_ioctl_balance_args_flags = BTRFS_BALANCE_DATA, BTRFS_BALANCE_SYSTEM, BTRFS_BALANCE_METADATA, BTRFS_BALANCE_FORCE, BTRFS_BALANCE_RESUME
+btrfs_ioctl_send_flags = BTRFS_SEND_FLAG_NO_FILE_DATA, BTRFS_SEND_FLAG_OMIT_STREAM_HEADER, BTRFS_SEND_FLAG_OMIT_END_CMD
+btrfs_ioctl_get_dev_stats_flags = BTRFS_DEV_STATS_RESET
+btrfs_ioctl_quota_ctl_cmd = BTRFS_QUOTA_CTL_ENABLE, BTRFS_QUOTA_CTL_DISABLE, BTRFS_QUOTA_CTL_RESCAN__NOTUSED
+btrfs_ioctl_dev_replace_args_cmd = BTRFS_IOCTL_DEV_REPLACE_CMD_START, BTRFS_IOCTL_DEV_REPLACE_CMD_STATUS, BTRFS_IOCTL_DEV_REPLACE_CMD_CANCEL, BTRFS_IOCTL_DEV_REPLACE_RESULT_NO_ERROR, BTRFS_IOCTL_DEV_REPLACE_RESULT_NOT_STARTED, BTRFS_IOCTL_DEV_REPLACE_RESULT_ALREADY_STARTED, BTRFS_IOCTL_DEV_REPLACE_RESULT_SCRUB_INPROGRESS
+cont_reading_from_srcdev_mode_flags = BTRFS_IOCTL_DEV_REPLACE_CONT_READING_FROM_SRCDEV_MODE_ALWAYS, BTRFS_IOCTL_DEV_REPLACE_CONT_READING_FROM_SRCDEV_MODE_AVOID
+btrfs_ioctl_feature_compat_flags = BTRFS_FEATURE_COMPAT_RO_FREE_SPACE_TREE, BTRFS_FEATURE_COMPAT_RO_FREE_SPACE_TREE_VALID
+btrfs_ioctl_feature_compat_ro_flags = BTRFS_FEATURE_COMPAT_RO_FREE_SPACE_TREE, BTRFS_FEATURE_COMPAT_RO_FREE_SPACE_TREE_VALID
+btrfs_ioctl_feature_incompat_flags = BTRFS_FEATURE_INCOMPAT_MIXED_BACKREF, BTRFS_FEATURE_INCOMPAT_DEFAULT_SUBVOL, BTRFS_FEATURE_INCOMPAT_MIXED_GROUPS, BTRFS_FEATURE_INCOMPAT_COMPRESS_LZO, BTRFS_FEATURE_INCOMPAT_COMPRESS_ZSTD
diff --git a/sys/linux/fs_ioctl_btrfs.txt.const b/sys/linux/fs_ioctl_btrfs.txt.const
index 306a25717..7b98359bb 100644
--- a/sys/linux/fs_ioctl_btrfs.txt.const
+++ b/sys/linux/fs_ioctl_btrfs.txt.const
@@ -1,17 +1,128 @@
# Code generated by syz-sysgen. DO NOT EDIT.
arches = 386, amd64, arm, arm64, mips64le, ppc64le, riscv64, s390x
+BTRFS_BALANCE_ARGS_DEVID = 4
+BTRFS_BALANCE_ARGS_DRANGE = 8
+BTRFS_BALANCE_ARGS_LIMIT = 32
+BTRFS_BALANCE_ARGS_LIMIT_RANGE = 64
+BTRFS_BALANCE_ARGS_PROFILES = 1
+BTRFS_BALANCE_ARGS_STRIPES_RANGE = 128
+BTRFS_BALANCE_ARGS_USAGE = 2
+BTRFS_BALANCE_ARGS_USAGE_RANGE = 1024
+BTRFS_BALANCE_ARGS_VRANGE = 16
+BTRFS_BALANCE_CTL_CANCEL = 2
+BTRFS_BALANCE_CTL_PAUSE = 1
+BTRFS_BALANCE_DATA = 1
+BTRFS_BALANCE_FORCE = 8
+BTRFS_BALANCE_METADATA = 4
+BTRFS_BALANCE_RESUME = 16
+BTRFS_BALANCE_STATE_CANCEL_REQ = 4
+BTRFS_BALANCE_STATE_PAUSE_REQ = 2
+BTRFS_BALANCE_STATE_RUNNING = 1
+BTRFS_BALANCE_SYSTEM = 2
+BTRFS_COMPRESS_LZO = 2
+BTRFS_COMPRESS_NONE = 0
+BTRFS_COMPRESS_ZLIB = 1
+BTRFS_COMPRESS_ZSTD = 3
+BTRFS_DEFRAG_RANGE_COMPRESS = 1
+BTRFS_DEFRAG_RANGE_START_IO = 2
+BTRFS_DEVICE_MAX = 1025
+BTRFS_DEVICE_PATH_NAME_MAX = 1024
+BTRFS_DEVICE_SPEC_BY_ID = 8
+BTRFS_DEV_PAD = 121
+BTRFS_DEV_STATS_RESET = 1
+BTRFS_DEV_STAT_VALUES_MAX = 5
+BTRFS_FEATURE_COMPAT_RO_FREE_SPACE_TREE = 1
+BTRFS_FEATURE_COMPAT_RO_FREE_SPACE_TREE_VALID = 2
+BTRFS_FEATURE_INCOMPAT_COMPRESS_LZO = 8
+BTRFS_FEATURE_INCOMPAT_COMPRESS_ZSTD = 16
+BTRFS_FEATURE_INCOMPAT_DEFAULT_SUBVOL = 2
+BTRFS_FEATURE_INCOMPAT_MIXED_BACKREF = 1
+BTRFS_FEATURE_INCOMPAT_MIXED_GROUPS = 4
+BTRFS_FSID_SIZE = 16
+BTRFS_INO_LOOKUP_PATH_MAX = 4080
+BTRFS_INO_LOOKUP_USER_PATH_MAX = 3824
+BTRFS_IOCTL_DEV_REPLACE_CMD_CANCEL = 2
+BTRFS_IOCTL_DEV_REPLACE_CMD_START = 0
+BTRFS_IOCTL_DEV_REPLACE_CMD_STATUS = 1
+BTRFS_IOCTL_DEV_REPLACE_CONT_READING_FROM_SRCDEV_MODE_ALWAYS = 0
+BTRFS_IOCTL_DEV_REPLACE_CONT_READING_FROM_SRCDEV_MODE_AVOID = 1
+BTRFS_IOCTL_DEV_REPLACE_RESULT_ALREADY_STARTED = 2
+BTRFS_IOCTL_DEV_REPLACE_RESULT_NOT_STARTED = 1
+BTRFS_IOCTL_DEV_REPLACE_RESULT_NO_ERROR = 0
+BTRFS_IOCTL_DEV_REPLACE_RESULT_SCRUB_INPROGRESS = 3
BTRFS_IOC_ADD_DEV = 1342215178, mips64le:ppc64le:2415957002
BTRFS_IOC_BALANCE = 1342215180, mips64le:ppc64le:2415957004
-BTRFS_IOC_CLONE = 1074041865, mips64le:ppc64le:2147783689
-BTRFS_IOC_CLONE_RANGE = 1075876877, mips64le:ppc64le:2149618701
+BTRFS_IOC_BALANCE_CTL = 1074041889, mips64le:ppc64le:2147783713
+BTRFS_IOC_BALANCE_PROGRESS = 2214630434, mips64le:ppc64le:1140888610
+BTRFS_IOC_BALANCE_V2 = 3288372256
+BTRFS_IOC_DEFAULT_SUBVOL = 1074304019, mips64le:ppc64le:2148045843
BTRFS_IOC_DEFRAG = 1342215170, mips64le:ppc64le:2415956994
-BTRFS_IOC_FILE_EXTENT_SAME = 3222836278
+BTRFS_IOC_DEFRAG_RANGE = 1076925456, mips64le:ppc64le:2150667280
+BTRFS_IOC_DEV_INFO = 3489698846
+BTRFS_IOC_DEV_REPLACE = 3391657013, 386:3391394869
+BTRFS_IOC_FS_INFO = 2214630431, mips64le:ppc64le:1140888607
+BTRFS_IOC_GET_DEV_STATS = 3288896564
+BTRFS_IOC_GET_FEATURES = 2149094457, mips64le:ppc64le:1075352633
+BTRFS_IOC_GET_SUBVOL_INFO = 2180551740, 386:2179503164, mips64le:ppc64le:1106809916
+BTRFS_IOC_GET_SUBVOL_ROOTREF = 3489698877
+BTRFS_IOC_GET_SUPPORTED_FEATURES = 2152240185, mips64le:ppc64le:1078498361
+BTRFS_IOC_INO_LOOKUP = 3489698834
+BTRFS_IOC_INO_LOOKUP_USER = 3489698878
+BTRFS_IOC_INO_PATHS = 3224933411
+BTRFS_IOC_LOGICAL_INO = 3224933412
+BTRFS_IOC_LOGICAL_INO_V2 = 3224933435
+BTRFS_IOC_QGROUP_ASSIGN = 1075352617, mips64le:ppc64le:2149094441
+BTRFS_IOC_QGROUP_CREATE = 1074828330, mips64le:ppc64le:2148570154
+BTRFS_IOC_QGROUP_LIMIT = 2150667307, mips64le:ppc64le:1076925483
+BTRFS_IOC_QUOTA_CTL = 3222311976
+BTRFS_IOC_QUOTA_RESCAN = 1077974060, mips64le:ppc64le:2151715884
+BTRFS_IOC_QUOTA_RESCAN_STATUS = 2151715885, mips64le:ppc64le:1077974061
+BTRFS_IOC_QUOTA_RESCAN_WAIT = 37934, mips64le:ppc64le:536908846
BTRFS_IOC_RESIZE = 1342215171, mips64le:ppc64le:2415956995
BTRFS_IOC_RM_DEV = 1342215179, mips64le:ppc64le:2415957003
-BTRFS_IOC_SCAN_DEV = 1342215172, mips64le:ppc64le:2415956996
+BTRFS_IOC_RM_DEV_V2 = 1342215226, mips64le:ppc64le:2415957050
+BTRFS_IOC_SCRUB = 3288372251
+BTRFS_IOC_SCRUB_CANCEL = 37916, mips64le:ppc64le:536908828
+BTRFS_IOC_SCRUB_PROGRESS = 3288372253
+BTRFS_IOC_SEND = 1078498342, 386:1078236198, mips64le:ppc64le:2152240166
+BTRFS_IOC_SET_FEATURES = 1076925497, mips64le:ppc64le:2150667321
+BTRFS_IOC_SET_RECEIVED_SUBVOL = 3234370597, 386:3233846309
BTRFS_IOC_SNAP_CREATE = 1342215169, mips64le:ppc64le:2415956993
+BTRFS_IOC_SNAP_CREATE_V2 = 1342215191, mips64le:ppc64le:2415957015
BTRFS_IOC_SNAP_DESTROY = 1342215183, mips64le:ppc64le:2415957007
+BTRFS_IOC_SNAP_DESTROY_V2 = 1342215231, mips64le:ppc64le:2415957055
+BTRFS_IOC_SPACE_INFO = 3222311956
+BTRFS_IOC_START_SYNC = 2148045848, mips64le:ppc64le:1074304024
BTRFS_IOC_SUBVOL_CREATE = 1342215182, mips64le:ppc64le:2415957006
+BTRFS_IOC_SUBVOL_CREATE_V2 = 1342215192, mips64le:ppc64le:2415957016
+BTRFS_IOC_SUBVOL_GETFLAGS = 2148045849, mips64le:ppc64le:1074304025
+BTRFS_IOC_SUBVOL_SETFLAGS = 1074304026, mips64le:ppc64le:2148045850
BTRFS_IOC_SYNC = 37896, mips64le:ppc64le:536908808
-BTRFS_IOC_TRANS_END = 37895, mips64le:ppc64le:536908807
-BTRFS_IOC_TRANS_START = 37894, mips64le:ppc64le:536908806
+BTRFS_IOC_TREE_SEARCH = 3489698833
+BTRFS_IOC_TREE_SEARCH_V2 = 3228603409
+BTRFS_IOC_WAIT_SYNC = 1074304022, mips64le:ppc64le:2148045846
+BTRFS_LOGICAL_INO_ARGS_IGNORE_OFFSET = 1
+BTRFS_MAX_ROOTREF_BUFFER_NUM = 255
+BTRFS_PATH_MAX = 4088
+BTRFS_QGROUP_INHERIT_SET_LIMITS = 1
+BTRFS_QGROUP_LIMIT_EXCL_CMPR = 32
+BTRFS_QGROUP_LIMIT_MAX_EXCL = 2
+BTRFS_QGROUP_LIMIT_MAX_RFER = 1
+BTRFS_QGROUP_LIMIT_RFER_CMPR = 16
+BTRFS_QGROUP_LIMIT_RSV_EXCL = 8
+BTRFS_QGROUP_LIMIT_RSV_RFER = 4
+BTRFS_QUOTA_CTL_DISABLE = 2
+BTRFS_QUOTA_CTL_ENABLE = 1
+BTRFS_QUOTA_CTL_RESCAN__NOTUSED = 3
+BTRFS_SCRUB_READONLY = 1
+BTRFS_SEARCH_ARGS_BUFSIZE = 3992
+BTRFS_SEND_FLAG_NO_FILE_DATA = 1
+BTRFS_SEND_FLAG_OMIT_END_CMD = 4
+BTRFS_SEND_FLAG_OMIT_STREAM_HEADER = 2
+BTRFS_SUBVOL_MAX = 4040
+BTRFS_SUBVOL_QGROUP_INHERIT = 4
+BTRFS_SUBVOL_RDONLY = 2
+BTRFS_SUBVOL_SPEC_BY_ID = 16
+BTRFS_UUID_SIZE = 16
+BTRFS_VOL_MAX = 256
+__NR_ioctl = 54, amd64:16, arm64:riscv64:29, mips64le:5015