Add btrfs support

Fix MK_ARRAY()
 -----BEGIN PGP SIGNATURE-----
 
 iQJGBAABCAAwFiEEzS913cjjpNwuT1Fz8ww4vT8vvjwFAl9QKi0SHGxhdXJlbnRA
 dml2aWVyLmV1AAoJEPMMOL0/L748fnMP/iOEIiotDBW7TQ6f2iOejvlSOsYN3Wtz
 735srtaD5og/0oaYH+nQ9kVV0cY6ZObe2KA9JeyodogkhuwzXHPjKlKWHBNGUMtB
 fdur65/1I9tNQDW+FfVc+4uT3Vk3lBoHEMCmmtVVRcB+coa7kAXtntqAQPAkjmow
 lA7WeGg1sIKVd1Hg+gM9qkboxqi9t90sbd+bhhHy2lPcCJvGFIWFRcgwwvJzIP49
 K6h551/zXe7mLQ1dG4dPvNHnpnS+0HhgVzUGuERjx1wNgoQN1adKPO8R3aQl1mr7
 ZIPWmZw6blw6neG3rMYEaSvfS+AItPCxE5zlpsJibni34sYHRIrukDhtxj1UMrJX
 mZmJgFQthUbd1vGYBTJNy6gb0IHc8TyrIhsjclSWDcdZytaEKALm6OmgEqT8VCVA
 KvWg7gnxi2nuCHWCaGjslBSiH7PjtzeY5g4AOeEYGfi3IBaRYdUDdB4jr1x7zfqT
 66ROoi9Uwg5+vnlRenTFX3f0gXFXuqpIJf4AB8HXv3R6dDw+lpeCZM1MFOtNOFCK
 hKrRF/Jz+g69DqvFbM6L6qSEjsco0PoXVMscyqKJOV8XZdycf3wtEbFofLiV6cPH
 TyiebOKQjOGszxmQVXkdC7LD8h+jI6ZJb1ox2j9boXBVNTNUpV3ydVDnErfwKNxs
 1Xx8F/bOVLlX
 =Pr4V
 -----END PGP SIGNATURE-----

Merge remote-tracking branch 'remotes/vivier2/tags/linux-user-for-5.2-pull-request' into staging

Add btrfs support
Fix MK_ARRAY()

# gpg: Signature made Thu 03 Sep 2020 00:26:37 BST
# gpg:                using RSA key CD2F75DDC8E3A4DC2E4F5173F30C38BD3F2FBE3C
# gpg:                issuer "laurent@vivier.eu"
# gpg: Good signature from "Laurent Vivier <lvivier@redhat.com>" [full]
# gpg:                 aka "Laurent Vivier <laurent@vivier.eu>" [full]
# gpg:                 aka "Laurent Vivier (Red Hat) <lvivier@redhat.com>" [full]
# Primary key fingerprint: CD2F 75DD C8E3 A4DC 2E4F  5173 F30C 38BD 3F2F BE3C

* remotes/vivier2/tags/linux-user-for-5.2-pull-request:
  linux-user: Add support for btrfs ioctls used to scrub a filesystem
  linux-user: Add support for btrfs ioctls used to manage quota
  linux-user: Add support for two btrfs ioctls used for subvolume
  linux-user: Add support for a group of btrfs inode ioctls
  linux-user: Add support for btrfs ioctls used to get/set features
  linux-user: Add support for btrfs ioctls used to manipulate with devices
  linux-user: Add support for a group of btrfs ioctls used for snapshots
  linux-user: Add support for a group of btrfs ioctls used for subvolumes
  linux-user: fix implicit conversion from enumeration type error

Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
This commit is contained in:
Peter Maydell 2020-09-04 15:53:56 +01:00
commit 1133ce5ec9
6 changed files with 337 additions and 1 deletions

9
configure vendored
View File

@ -4920,6 +4920,12 @@ if check_include sys/kcov.h ; then
kcov=yes
fi
# check for btrfs filesystem support (kernel must be 3.9+)
btrfs=no
if check_include linux/btrfs.h ; then
btrfs=yes
fi
# If we're making warnings fatal, apply this to Sphinx runs as well
sphinx_werror=""
if test "$werror" = "yes"; then
@ -6898,6 +6904,9 @@ fi
if test "$kcov" = "yes" ; then
echo "CONFIG_KCOV=y" >> $config_host_mak
fi
if test "$btrfs" = "yes" ; then
echo "CONFIG_BTRFS=y" >> $config_host_mak
fi
if test "$inotify" = "yes" ; then
echo "CONFIG_INOTIFY=y" >> $config_host_mak
fi

View File

@ -42,7 +42,7 @@ typedef enum argtype {
} argtype;
#define MK_PTR(type) TYPE_PTR, type
#define MK_ARRAY(type, size) TYPE_ARRAY, size, type
#define MK_ARRAY(type, size) TYPE_ARRAY, (int)(size), type
#define MK_STRUCT(id) TYPE_STRUCT, id
#define THUNK_TARGET 0

View File

@ -174,6 +174,130 @@
IOCTL(FS_IOC32_GETVERSION, IOC_R, MK_PTR(TYPE_INT))
IOCTL(FS_IOC32_SETVERSION, IOC_W, MK_PTR(TYPE_INT))
#ifdef BTRFS_IOC_SNAP_CREATE
IOCTL(BTRFS_IOC_SNAP_CREATE, IOC_W,
MK_PTR(MK_STRUCT(STRUCT_btrfs_ioctl_vol_args)))
#endif
#ifdef BTRFS_IOC_SCAN_DEV
IOCTL(BTRFS_IOC_SCAN_DEV, IOC_W,
MK_PTR(MK_STRUCT(STRUCT_btrfs_ioctl_vol_args)))
#endif
#ifdef BTRFS_IOC_FORGET_DEV
IOCTL(BTRFS_IOC_FORGET_DEV, IOC_W,
MK_PTR(MK_STRUCT(STRUCT_btrfs_ioctl_vol_args)))
#endif
#ifdef BTRFS_IOC_ADD_DEV
IOCTL(BTRFS_IOC_ADD_DEV, IOC_W,
MK_PTR(MK_STRUCT(STRUCT_btrfs_ioctl_vol_args)))
#endif
#ifdef BTRFS_IOC_RM_DEV
IOCTL(BTRFS_IOC_RM_DEV, IOC_W,
MK_PTR(MK_STRUCT(STRUCT_btrfs_ioctl_vol_args)))
#endif
#ifdef BTRFS_IOC_SUBVOL_CREATE
IOCTL(BTRFS_IOC_SUBVOL_CREATE, IOC_W,
MK_PTR(MK_STRUCT(STRUCT_btrfs_ioctl_vol_args)))
#endif
#ifdef BTRFS_IOC_SNAP_DESTROY
IOCTL(BTRFS_IOC_SNAP_DESTROY, IOC_W,
MK_PTR(MK_STRUCT(STRUCT_btrfs_ioctl_vol_args)))
#endif
#ifdef BTRFS_IOC_INO_LOOKUP
IOCTL(BTRFS_IOC_INO_LOOKUP, IOC_RW,
MK_PTR(MK_STRUCT(STRUCT_btrfs_ioctl_ino_lookup_args)))
#endif
#ifdef BTRFS_IOC_DEFAULT_SUBVOL
IOCTL(BTRFS_IOC_DEFAULT_SUBVOL, IOC_W, MK_PTR(TYPE_ULONGLONG))
#endif
#ifdef BTRFS_IOC_SUBVOL_GETFLAGS
IOCTL(BTRFS_IOC_SUBVOL_GETFLAGS, IOC_R, MK_PTR(TYPE_ULONGLONG))
#endif
#ifdef BTRFS_IOC_SUBVOL_SETFLAGS
IOCTL(BTRFS_IOC_SUBVOL_SETFLAGS, IOC_W, MK_PTR(TYPE_ULONGLONG))
#endif
#ifdef BTRFS_IOC_SCRUB
IOCTL(BTRFS_IOC_SCRUB, IOC_RW,
MK_PTR(MK_STRUCT(STRUCT_btrfs_ioctl_scrub_args)))
#endif
#ifdef BTRFS_IOC_SCRUB_CANCEL
IOCTL(BTRFS_IOC_SCRUB_CANCEL, 0, TYPE_NULL)
#endif
#ifdef BTRFS_IOC_SCRUB_PROGRESS
IOCTL(BTRFS_IOC_SCRUB_PROGRESS, IOC_RW,
MK_PTR(MK_STRUCT(STRUCT_btrfs_ioctl_scrub_args)))
#endif
#ifdef BTRFS_IOC_DEV_INFO
IOCTL(BTRFS_IOC_DEV_INFO, IOC_RW,
MK_PTR(MK_STRUCT(STRUCT_btrfs_ioctl_dev_info_args)))
#endif
#ifdef BTRFS_IOC_INO_PATHS
IOCTL(BTRFS_IOC_INO_PATHS, IOC_RW,
MK_PTR(MK_STRUCT(STRUCT_btrfs_ioctl_ino_path_args)))
#endif
#ifdef BTRFS_IOC_LOGICAL_INO
IOCTL(BTRFS_IOC_LOGICAL_INO, IOC_RW,
MK_PTR(MK_STRUCT(STRUCT_btrfs_ioctl_logical_ino_args)))
#endif
#ifdef BTRFS_IOC_QUOTA_CTL
IOCTL(BTRFS_IOC_QUOTA_CTL, IOC_RW,
MK_PTR(MK_STRUCT(STRUCT_btrfs_ioctl_quota_ctl_args)))
#endif
#ifdef BTRFS_IOC_QGROUP_ASSIGN
IOCTL(BTRFS_IOC_QGROUP_ASSIGN, IOC_W,
MK_PTR(MK_STRUCT(STRUCT_btrfs_ioctl_qgroup_assign_args)))
#endif
#ifdef BTRFS_IOC_QGROUP_CREATE
IOCTL(BTRFS_IOC_QGROUP_CREATE, IOC_W,
MK_PTR(MK_STRUCT(STRUCT_btrfs_ioctl_qgroup_create_args)))
#endif
#ifdef BTRFS_IOC_QGROUP_LIMIT
IOCTL(BTRFS_IOC_QGROUP_LIMIT, IOC_R,
MK_PTR(MK_STRUCT(STRUCT_btrfs_ioctl_qgroup_limit_args)))
#endif
#ifdef BTRFS_IOC_QUOTA_RESCAN
IOCTL(BTRFS_IOC_QUOTA_RESCAN, IOC_W,
MK_PTR(MK_STRUCT(STRUCT_btrfs_ioctl_quota_rescan_args)))
#endif
#ifdef BTRFS_IOC_QUOTA_RESCAN_STATUS
IOCTL(BTRFS_IOC_QUOTA_RESCAN_STATUS, IOC_R,
MK_PTR(MK_STRUCT(STRUCT_btrfs_ioctl_quota_rescan_args)))
#endif
#ifdef BTRFS_IOC_QUOTA_RESCAN_WAIT
IOCTL(BTRFS_IOC_QUOTA_RESCAN_WAIT, 0, TYPE_NULL)
#endif
#ifdef BTRFS_IOC_GET_DEV_STATS
IOCTL(BTRFS_IOC_GET_DEV_STATS, IOC_RW,
MK_PTR(MK_STRUCT(STRUCT_btrfs_ioctl_get_dev_stats)))
#endif
#ifdef BTRFS_IOC_GET_FEATURES
IOCTL(BTRFS_IOC_GET_FEATURES, IOC_R,
MK_PTR(MK_STRUCT(STRUCT_btrfs_ioctl_feature_flags)))
#endif
#ifdef BTRFS_IOC_SET_FEATURES
IOCTL(BTRFS_IOC_SET_FEATURES, IOC_W,
MK_PTR(MK_ARRAY(MK_STRUCT(STRUCT_btrfs_ioctl_feature_flags), 2)))
#endif
#ifdef BTRFS_IOC_GET_SUPPORTED_FEATURES
IOCTL(BTRFS_IOC_GET_SUPPORTED_FEATURES, IOC_R,
MK_PTR(MK_ARRAY(MK_STRUCT(STRUCT_btrfs_ioctl_feature_flags), 3)))
#endif
#ifdef BTRFS_IOC_LOGICAL_INO_V2
IOCTL(BTRFS_IOC_LOGICAL_INO_V2, IOC_RW,
MK_PTR(MK_STRUCT(STRUCT_btrfs_ioctl_logical_ino_args)))
#endif
#ifdef BTRFS_IOC_GET_SUBVOL_INFO
IOCTL(BTRFS_IOC_GET_SUBVOL_INFO, IOC_R,
MK_PTR(MK_STRUCT(STRUCT_btrfs_ioctl_get_subvol_info_args)))
#endif
#ifdef BTRFS_IOC_GET_SUBVOL_ROOTREF
IOCTL(BTRFS_IOC_GET_SUBVOL_ROOTREF, IOC_RW,
MK_PTR(MK_STRUCT(STRUCT_btrfs_ioctl_get_subvol_rootref_args)))
#endif
#ifdef BTRFS_IOC_INO_LOOKUP_USER
IOCTL(BTRFS_IOC_INO_LOOKUP_USER, IOC_RW,
MK_PTR(MK_STRUCT(STRUCT_btrfs_ioctl_ino_lookup_user_args)))
#endif
#ifdef CONFIG_USBFS
/* USB ioctls */
IOCTL(USBDEVFS_CONTROL, IOC_RW,

View File

@ -112,6 +112,9 @@
#include <linux/if_alg.h>
#include <linux/rtc.h>
#include <sound/asound.h>
#ifdef CONFIG_BTRFS
#include <linux/btrfs.h>
#endif
#ifdef HAVE_DRM_H
#include <libdrm/drm.h>
#include <libdrm/i915_drm.h>

View File

@ -1005,6 +1005,43 @@ struct target_rtc_pll_info {
#define TARGET_FS_IOC32_GETVERSION TARGET_IOR('v', 1, int)
#define TARGET_FS_IOC32_SETVERSION TARGET_IOW('v', 2, int)
/* btrfs ioctls */
#define TARGET_BTRFS_IOC_SNAP_CREATE TARGET_IOWU(BTRFS_IOCTL_MAGIC, 1)
#define TARGET_BTRFS_IOC_SCAN_DEV TARGET_IOWU(BTRFS_IOCTL_MAGIC, 4)
#define TARGET_BTRFS_IOC_FORGET_DEV TARGET_IOWU(BTRFS_IOCTL_MAGIC, 5)
#define TARGET_BTRFS_IOC_ADD_DEV TARGET_IOWU(BTRFS_IOCTL_MAGIC, 10)
#define TARGET_BTRFS_IOC_RM_DEV TARGET_IOWU(BTRFS_IOCTL_MAGIC, 11)
#define TARGET_BTRFS_IOC_SUBVOL_CREATE TARGET_IOWU(BTRFS_IOCTL_MAGIC, 14)
#define TARGET_BTRFS_IOC_SNAP_DESTROY TARGET_IOWU(BTRFS_IOCTL_MAGIC, 15)
#define TARGET_BTRFS_IOC_INO_LOOKUP TARGET_IOWRU(BTRFS_IOCTL_MAGIC, 18)
#define TARGET_BTRFS_IOC_DEFAULT_SUBVOL TARGET_IOW(BTRFS_IOCTL_MAGIC, 19,\
abi_ullong)
#define TARGET_BTRFS_IOC_SUBVOL_GETFLAGS TARGET_IOR(BTRFS_IOCTL_MAGIC, 25,\
abi_ullong)
#define TARGET_BTRFS_IOC_SUBVOL_SETFLAGS TARGET_IOW(BTRFS_IOCTL_MAGIC, 26,\
abi_ullong)
#define TARGET_BTRFS_IOC_SCRUB TARGET_IOWRU(BTRFS_IOCTL_MAGIC, 27)
#define TARGET_BTRFS_IOC_SCRUB_CANCEL TARGET_IO(BTRFS_IOCTL_MAGIC, 28)
#define TARGET_BTRFS_IOC_SCRUB_PROGRESS TARGET_IOWRU(BTRFS_IOCTL_MAGIC, 29)
#define TARGET_BTRFS_IOC_DEV_INFO TARGET_IOWRU(BTRFS_IOCTL_MAGIC, 30)
#define TARGET_BTRFS_IOC_INO_PATHS TARGET_IOWRU(BTRFS_IOCTL_MAGIC, 35)
#define TARGET_BTRFS_IOC_LOGICAL_INO TARGET_IOWRU(BTRFS_IOCTL_MAGIC, 36)
#define TARGET_BTRFS_IOC_QUOTA_CTL TARGET_IOWRU(BTRFS_IOCTL_MAGIC, 40)
#define TARGET_BTRFS_IOC_QGROUP_ASSIGN TARGET_IOWU(BTRFS_IOCTL_MAGIC, 41)
#define TARGET_BTRFS_IOC_QGROUP_CREATE TARGET_IOWU(BTRFS_IOCTL_MAGIC, 42)
#define TARGET_BTRFS_IOC_QGROUP_LIMIT TARGET_IORU(BTRFS_IOCTL_MAGIC, 43)
#define TARGET_BTRFS_IOC_QUOTA_RESCAN TARGET_IOWU(BTRFS_IOCTL_MAGIC, 44)
#define TARGET_BTRFS_IOC_QUOTA_RESCAN_STATUS TARGET_IORU(BTRFS_IOCTL_MAGIC, 45)
#define TARGET_BTRFS_IOC_QUOTA_RESCAN_WAIT TARGET_IO(BTRFS_IOCTL_MAGIC, 46)
#define TARGET_BTRFS_IOC_GET_DEV_STATS TARGET_IOWRU(BTRFS_IOCTL_MAGIC, 52)
#define TARGET_BTRFS_IOC_GET_FEATURES TARGET_IORU(BTRFS_IOCTL_MAGIC, 57)
#define TARGET_BTRFS_IOC_SET_FEATURES TARGET_IOWU(BTRFS_IOCTL_MAGIC, 57)
#define TARGET_BTRFS_IOC_GET_SUPPORTED_FEATURES TARGET_IORU(BTRFS_IOCTL_MAGIC, 57)
#define TARGET_BTRFS_IOC_LOGICAL_INO_V2 TARGET_IOWRU(BTRFS_IOCTL_MAGIC, 59)
#define TARGET_BTRFS_IOC_GET_SUBVOL_INFO TARGET_IORU(BTRFS_IOCTL_MAGIC, 60)
#define TARGET_BTRFS_IOC_GET_SUBVOL_ROOTREF TARGET_IOWRU(BTRFS_IOCTL_MAGIC, 61)
#define TARGET_BTRFS_IOC_INO_LOOKUP_USER TARGET_IOWRU(BTRFS_IOCTL_MAGIC, 62)
/* usb ioctls */
#define TARGET_USBDEVFS_CONTROL TARGET_IOWRU('U', 0)
#define TARGET_USBDEVFS_BULK TARGET_IOWRU('U', 2)

View File

@ -358,6 +358,169 @@ STRUCT(blkpg_partition,
MK_ARRAY(TYPE_CHAR, BLKPG_DEVNAMELTH), /* devname */
MK_ARRAY(TYPE_CHAR, BLKPG_VOLNAMELTH)) /* volname */
#if defined(BTRFS_IOC_SUBVOL_CREATE) || defined(BTRFS_IOC_SNAP_CREATE) || \
defined(BTRFS_IOC_SNAP_DESTROY) || defined(BTRFS_IOC_SCAN_DEV) || \
defined(BTRFS_IOC_FORGET_DEV) || defined(BTRFS_IOC_ADD_DEV) || \
defined(BTRFS_IOC_RM_DEV) || defined(BTRFS_IOC_DEV_INFO)
STRUCT(btrfs_ioctl_vol_args,
TYPE_LONGLONG, /* fd */
MK_ARRAY(TYPE_CHAR, BTRFS_PATH_NAME_MAX + 1)) /* name */
#endif
#ifdef BTRFS_IOC_GET_SUBVOL_INFO
STRUCT(btrfs_ioctl_timespec,
TYPE_ULONGLONG, /* sec */
TYPE_INT) /* nsec */
STRUCT(btrfs_ioctl_get_subvol_info_args,
TYPE_ULONGLONG, /* treeid */
MK_ARRAY(TYPE_CHAR, BTRFS_VOL_NAME_MAX + 1),
TYPE_ULONGLONG, /* parentid */
TYPE_ULONGLONG, /* dirid */
TYPE_ULONGLONG, /* generation */
TYPE_ULONGLONG, /* flags */
MK_ARRAY(TYPE_CHAR, BTRFS_UUID_SIZE), /* uuid */
MK_ARRAY(TYPE_CHAR, BTRFS_UUID_SIZE), /* parent_uuid */
MK_ARRAY(TYPE_CHAR, BTRFS_UUID_SIZE), /* received_uuid */
TYPE_ULONGLONG, /* ctransid */
TYPE_ULONGLONG, /* otransid */
TYPE_ULONGLONG, /* stransid */
TYPE_ULONGLONG, /* rtransid */
MK_STRUCT(STRUCT_btrfs_ioctl_timespec), /* ctime */
MK_STRUCT(STRUCT_btrfs_ioctl_timespec), /* otime */
MK_STRUCT(STRUCT_btrfs_ioctl_timespec), /* stime */
MK_STRUCT(STRUCT_btrfs_ioctl_timespec), /* rtime */
MK_ARRAY(TYPE_ULONGLONG, 8)) /* reserved */
#endif
#ifdef BTRFS_IOC_INO_LOOKUP
STRUCT(btrfs_ioctl_ino_lookup_args,
TYPE_ULONGLONG, /* treeid */
TYPE_ULONGLONG, /* objectid */
MK_ARRAY(TYPE_CHAR, BTRFS_INO_LOOKUP_PATH_MAX)) /* name */
#endif
#ifdef BTRFS_IOC_INO_PATHS
STRUCT(btrfs_ioctl_ino_path_args,
TYPE_ULONGLONG, /* inum */
TYPE_ULONGLONG, /* size */
MK_ARRAY(TYPE_ULONGLONG, 4), /* reserved */
TYPE_ULONGLONG) /* fspath */
#endif
#if defined(BTRFS_IOC_LOGICAL_INO) || defined(BTRFS_IOC_LOGICAL_INO_V2)
STRUCT(btrfs_ioctl_logical_ino_args,
TYPE_ULONGLONG, /* logical */
TYPE_ULONGLONG, /* size */
MK_ARRAY(TYPE_ULONGLONG, 3), /* reserved */
TYPE_ULONGLONG, /* flags */
TYPE_ULONGLONG) /* inodes */
#endif
#ifdef BTRFS_IOC_INO_LOOKUP_USER
STRUCT(btrfs_ioctl_ino_lookup_user_args,
TYPE_ULONGLONG, /* dirid */
TYPE_ULONGLONG, /* treeid */
MK_ARRAY(TYPE_CHAR, BTRFS_VOL_NAME_MAX + 1), /* name */
MK_ARRAY(TYPE_CHAR, BTRFS_INO_LOOKUP_USER_PATH_MAX)) /* path */
#endif
#if defined(BTRFS_IOC_SCRUB) || defined(BTRFS_IOC_SCRUB_PROGRESS)
STRUCT(btrfs_scrub_progress,
TYPE_ULONGLONG, /* data_extents_scrubbed */
TYPE_ULONGLONG, /* tree_extents_scrubbed */
TYPE_ULONGLONG, /* data_bytes_scrubbed */
TYPE_ULONGLONG, /* tree_bytes_scrubbed */
TYPE_ULONGLONG, /* read_errors */
TYPE_ULONGLONG, /* csum_errors */
TYPE_ULONGLONG, /* verify_errors */
TYPE_ULONGLONG, /* no_csum */
TYPE_ULONGLONG, /* csum_discards */
TYPE_ULONGLONG, /* super_errors */
TYPE_ULONGLONG, /* malloc_errors */
TYPE_ULONGLONG, /* uncorrectable_errors */
TYPE_ULONGLONG, /* corrected_er */
TYPE_ULONGLONG, /* last_physical */
TYPE_ULONGLONG) /* unverified_errors */
STRUCT(btrfs_ioctl_scrub_args,
TYPE_ULONGLONG, /* devid */
TYPE_ULONGLONG, /* start */
TYPE_ULONGLONG, /* end */
TYPE_ULONGLONG, /* flags */
MK_STRUCT(STRUCT_btrfs_scrub_progress), /* progress */
MK_ARRAY(TYPE_ULONGLONG,
(1024 - 32 -
sizeof(struct btrfs_scrub_progress)) / 8)) /* unused */
#endif
#ifdef BTRFS_IOC_DEV_INFO
STRUCT(btrfs_ioctl_dev_info_args,
TYPE_ULONGLONG, /* devid */
MK_ARRAY(TYPE_CHAR, BTRFS_UUID_SIZE), /* uuid */
TYPE_ULONGLONG, /* bytes_used */
TYPE_ULONGLONG, /* total_bytes */
MK_ARRAY(TYPE_ULONGLONG, 379), /* unused */
MK_ARRAY(TYPE_CHAR, BTRFS_DEVICE_PATH_NAME_MAX)) /* path */
#endif
#ifdef BTRFS_IOC_GET_SUBVOL_ROOTREF
STRUCT(rootref,
TYPE_ULONGLONG, /* treeid */
TYPE_ULONGLONG) /* dirid */
STRUCT(btrfs_ioctl_get_subvol_rootref_args,
TYPE_ULONGLONG, /* min_treeid */
MK_ARRAY(MK_STRUCT(STRUCT_rootref),
BTRFS_MAX_ROOTREF_BUFFER_NUM), /* rootref */
TYPE_CHAR, /* num_items */
MK_ARRAY(TYPE_CHAR, 7)) /* align */
#endif
#ifdef BTRFS_IOC_GET_DEV_STATS
STRUCT(btrfs_ioctl_get_dev_stats,
TYPE_ULONGLONG, /* devid */
TYPE_ULONGLONG, /* nr_items */
TYPE_ULONGLONG, /* flags */
MK_ARRAY(TYPE_ULONGLONG, BTRFS_DEV_STAT_VALUES_MAX), /* values */
MK_ARRAY(TYPE_ULONGLONG,
128 - 2 - BTRFS_DEV_STAT_VALUES_MAX)) /* unused */
#endif
STRUCT(btrfs_ioctl_quota_ctl_args,
TYPE_ULONGLONG, /* cmd */
TYPE_ULONGLONG) /* status */
STRUCT(btrfs_ioctl_quota_rescan_args,
TYPE_ULONGLONG, /* flags */
TYPE_ULONGLONG, /* progress */
MK_ARRAY(TYPE_ULONGLONG, 6)) /* reserved */
STRUCT(btrfs_ioctl_qgroup_assign_args,
TYPE_ULONGLONG, /* assign */
TYPE_ULONGLONG, /* src */
TYPE_ULONGLONG) /* dst */
STRUCT(btrfs_ioctl_qgroup_create_args,
TYPE_ULONGLONG, /* create */
TYPE_ULONGLONG) /* qgroupid */
STRUCT(btrfs_qgroup_limit,
TYPE_ULONGLONG, /* flags */
TYPE_ULONGLONG, /* max_rfer */
TYPE_ULONGLONG, /* max_excl */
TYPE_ULONGLONG, /* rsv_rfer */
TYPE_ULONGLONG) /* rsv_excl */
STRUCT(btrfs_ioctl_qgroup_limit_args,
TYPE_ULONGLONG, /* qgroupid */
MK_STRUCT(STRUCT_btrfs_qgroup_limit)) /* lim */
STRUCT(btrfs_ioctl_feature_flags,
TYPE_ULONGLONG, /* compat_flags */
TYPE_ULONGLONG, /* compat_ro_flags */
TYPE_ULONGLONG) /* incompat_flags */
STRUCT(rtc_time,
TYPE_INT, /* tm_sec */
TYPE_INT, /* tm_min */