[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [PATCH v2 4/8] linux-user: Add support for btrfs ioctls used to get/
From: |
Laurent Vivier |
Subject: |
Re: [PATCH v2 4/8] linux-user: Add support for btrfs ioctls used to get/set features |
Date: |
Fri, 7 Aug 2020 19:35:03 +0200 |
User-agent: |
Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Thunderbird/68.10.0 |
Le 03/08/2020 à 11:46, Filip Bozuta a écrit :
> 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>
> ---
> 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 c20bd97736..c6303a0406 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 23f966d552..13a444356b 100644
> --- a/linux-user/syscall_defs.h
> +++ b/linux-user/syscall_defs.h
> @@ -981,6 +981,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 b5718231e5..e26ab01e8f 100644
> --- a/linux-user/syscall_types.h
> +++ b/linux-user/syscall_types.h
> @@ -365,6 +365,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 */
>
Applied to my linux-user-for-5.2 branch.
Thanks,
Laurent
- [PATCH v2 0/8] linux-user: Adding support for a group of btrfs ioctls, Filip Bozuta, 2020/08/03
- [PATCH v2 1/8] linux-user: Add support for a group of btrfs ioctls used for subvolumes, Filip Bozuta, 2020/08/03
- [PATCH v2 2/8] linux-user: Add support for a group of btrfs ioctls used for snapshots, Filip Bozuta, 2020/08/03
- [PATCH v2 3/8] linux-user: Add support for btrfs ioctls used to manipulate with devices, Filip Bozuta, 2020/08/03
- [PATCH v2 4/8] linux-user: Add support for btrfs ioctls used to get/set features, Filip Bozuta, 2020/08/03
- Re: [PATCH v2 4/8] linux-user: Add support for btrfs ioctls used to get/set features,
Laurent Vivier <=
- [PATCH v2 5/8] linux-user: Add support for a group of btrfs inode ioctls, Filip Bozuta, 2020/08/03
- [PATCH v2 6/8] linux-user: Add support for two btrfs ioctls used for subvolume, Filip Bozuta, 2020/08/03
- [PATCH v2 7/8] linux-user: Add support for btrfs ioctls used to manage quota, Filip Bozuta, 2020/08/03
- [PATCH v2 8/8] linux-user: Add support for btrfs ioctls used to scrub a filesystem, Filip Bozuta, 2020/08/03