[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PULL 09/14] linux-user: Add support for btrfs ioctls used to get/set fe
From: |
Laurent Vivier |
Subject: |
[PULL 09/14] linux-user: Add support for btrfs ioctls used to get/set features |
Date: |
Thu, 13 Aug 2020 08:49:18 +0200 |
From: Filip Bozuta <Filip.Bozuta@syrmia.com>
This patch implements functionality for following ioctls:
BTRFS_IOC_GET_FEATURES - Getting feature flags
Read feature flags for a btrfs filesystem. The feature flags
are returned inside the ioctl's third argument which represents
a pointer to a following structure type:
struct btrfs_ioctl_feature_flags {
__u64 compat_flags;
__u64 compat_ro_flags;
__u64 incompat_flags;
};
All of the structure field represent bit masks that can be composed
of values which can be found on:
https://elixir.bootlin.com/linux/latest/source/fs/btrfs/ctree.h#L282
BTRFS_IOC_SET_FEATURES - Setting feature flags
Set and clear feature flags for a btrfs filesystem. The feature flags
are set using the ioctl's third argument which represents a
'struct btrfs_ioctl_feature_flags[2]' array. The first element of the
array represent flags which are to be cleared and the second element of
the array represent flags which are to be set. The second element has the
priority over the first, which means that if there are matching flags
in the elements, they will be set in the filesystem. If the flag values
in the third argument aren't correctly set to be composed of the available
predefined flag values, errno ENOPERM ("Operation not permitted") is
returned.
BTRFS_IOC_GET_SUPPORTED_FEATURES - Getting supported feature flags
Read supported feature flags for a btrfs filesystem. The supported
feature flags are read using the ioctl's third argument which represents
a 'struct btrfs_ioctl_feature_flags[3]' array. The first element of this
array represents all of the supported flags in the btrfs filesystem.
The second element represents flags that can be safely set and third element
represent flags that can be safely clearead.
Implementation notes:
All of the implemented ioctls use 'struct btrfs_ioctl_feature_flags' as
third argument. That is the reason why a corresponding defintion was added
in file 'linux-user/syscall_types.h'.
Signed-off-by: Filip Bozuta <Filip.Bozuta@syrmia.com>
Reviewed-by: Laurent Vivier <laurent@vivier.eu>
Message-Id: <20200803094629.21898-5-Filip.Bozuta@syrmia.com>
Signed-off-by: Laurent Vivier <laurent@vivier.eu>
---
linux-user/ioctls.h | 12 ++++++++++++
linux-user/syscall_defs.h | 3 +++
linux-user/syscall_types.h | 5 +++++
3 files changed, 20 insertions(+)
diff --git a/linux-user/ioctls.h b/linux-user/ioctls.h
index 55a6cbeca515..50fae1e33bc4 100644
--- a/linux-user/ioctls.h
+++ b/linux-user/ioctls.h
@@ -216,6 +216,18 @@
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_GET_SUBVOL_INFO
IOCTL(BTRFS_IOC_GET_SUBVOL_INFO, IOC_R,
MK_PTR(MK_STRUCT(STRUCT_btrfs_ioctl_get_subvol_info_args)))
diff --git a/linux-user/syscall_defs.h b/linux-user/syscall_defs.h
index f9f94c9c08cc..6cc3c1f6f5ba 100644
--- a/linux-user/syscall_defs.h
+++ b/linux-user/syscall_defs.h
@@ -986,6 +986,9 @@ struct target_rtc_pll_info {
abi_ullong)
#define TARGET_BTRFS_IOC_DEV_INFO
TARGET_IOWRU(BTRFS_IOCTL_MAGIC, 30)
#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_GET_SUBVOL_INFO TARGET_IORU(BTRFS_IOCTL_MAGIC,
60)
/* usb ioctls */
diff --git a/linux-user/syscall_types.h b/linux-user/syscall_types.h
index 35f94cdfc8ba..808f4daaf72e 100644
--- a/linux-user/syscall_types.h
+++ b/linux-user/syscall_types.h
@@ -398,6 +398,11 @@ STRUCT(btrfs_ioctl_get_dev_stats,
MK_ARRAY(TYPE_ULONGLONG,
128 - 2 - BTRFS_DEV_STAT_VALUES_MAX)) /* unused */
+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 */
--
2.26.2
- [PULL 00/14] Linux user for 5.2 patches, Laurent Vivier, 2020/08/13
- [PULL 01/14] linux-user: Fix "print_fdset()" in "strace.c" to not print ", " after last value, Laurent Vivier, 2020/08/13
- [PULL 02/14] linux-user: Validate mmap/mprotect prot value, Laurent Vivier, 2020/08/13
- [PULL 03/14] linux-user: Adjust guest page protection for the host, Laurent Vivier, 2020/08/13
- [PULL 07/14] linux-user: Add support for a group of btrfs ioctls used for snapshots, Laurent Vivier, 2020/08/13
- [PULL 06/14] linux-user: Add support for a group of btrfs ioctls used for subvolumes, Laurent Vivier, 2020/08/13
- [PULL 05/14] linux-user: Add support for a group of 2038 safe syscalls, Laurent Vivier, 2020/08/13
- [PULL 08/14] linux-user: Add support for btrfs ioctls used to manipulate with devices, Laurent Vivier, 2020/08/13
- [PULL 04/14] linux-user: Modify 'target_to_host/host_to_target_itimerspec()', Laurent Vivier, 2020/08/13
- [PULL 09/14] linux-user: Add support for btrfs ioctls used to get/set features,
Laurent Vivier <=
- [PULL 13/14] linux-user: Add support for btrfs ioctls used to scrub a filesystem, Laurent Vivier, 2020/08/13
- [PULL 10/14] linux-user: Add support for a group of btrfs inode ioctls, Laurent Vivier, 2020/08/13
- [PULL 14/14] linux-user: Fix 'utimensat()' implementation, Laurent Vivier, 2020/08/13
- [PULL 11/14] linux-user: Add support for two btrfs ioctls used for subvolume, Laurent Vivier, 2020/08/13
- [PULL 12/14] linux-user: Add support for btrfs ioctls used to manage quota, Laurent Vivier, 2020/08/13
- Re: [PULL 00/14] Linux user for 5.2 patches, Peter Maydell, 2020/08/21