[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [PATCH v2 8/8] linux-user: Add support for btrfs ioctls used to scru
From: |
Laurent Vivier |
Subject: |
Re: [PATCH v2 8/8] linux-user: Add support for btrfs ioctls used to scrub a filesystem |
Date: |
Fri, 7 Aug 2020 19:35:16 +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_SCRUB - Starting a btrfs filesystem scrub
>
> Start a btrfs filesystem scrub. The third ioctls argument
> is a pointer to a following type:
>
> struct btrfs_ioctl_scrub_args {
> __u64 devid; /* in */
> __u64 start; /* in */
> __u64 end; /* in */
> __u64 flags; /* in */
> struct btrfs_scrub_progress progress; /* out */
> /* pad to 1k */
> __u64 unused[(1024-32-sizeof(struct btrfs_scrub_progress))/8];
> };
>
> Before calling this ioctl, field 'devid' should be filled
> with value that represents the device id of the btrfs filesystem
> for which the scrub is to be started.
>
> BTRFS_IOC_SCRUB_CANCEL - Canceling scrub of a btrfs filesystem
>
> Cancel a btrfs filesystem scrub if it is running. The third
> ioctls argument is ignored.
>
> BTRFS_IOC_SCRUB_PROGRESS - Getting status of a running scrub
>
> Read the status of a running btrfs filesystem scrub. The third
> ioctls argument is a pointer to the above mentioned
> 'struct btrfs_ioctl_scrub_args'. Similarly as with 'BTRFS_IOC_SCRUB',
> the 'devid' field should be filled with value that represents the
> id of the btrfs device for which the scrub has started. The status
> of a running scrub is returned in the field 'progress' which is
> of type 'struct btrfs_scrub_progress' and its definition can be
> found at:
>
> https://elixir.bootlin.com/linux/latest/source/include/uapi/linux/btrfs.h#L150
>
> Implementation nots:
>
> Ioctls in this patch use type 'struct btrfs_ioctl_scrub_args' as their
> third argument. That is the reason why an aproppriate thunk type
> definition is added in file 'syscall_types.h'.
>
> Signed-off-by: Filip Bozuta <Filip.Bozuta@syrmia.com>
> Reviewed-by: Laurent Vivier <laurent@vivier.eu>
> ---
> linux-user/ioctls.h | 11 +++++++++++
> linux-user/syscall_defs.h | 3 +++
> linux-user/syscall_types.h | 27 +++++++++++++++++++++++++++
> 3 files changed, 41 insertions(+)
>
> diff --git a/linux-user/ioctls.h b/linux-user/ioctls.h
> index 8665f504bf..bf80615438 100644
> --- a/linux-user/ioctls.h
> +++ b/linux-user/ioctls.h
> @@ -215,6 +215,17 @@
> #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)))
> diff --git a/linux-user/syscall_defs.h b/linux-user/syscall_defs.h
> index 1b1b2c2d96..83c291f2d3 100644
> --- a/linux-user/syscall_defs.h
> +++ b/linux-user/syscall_defs.h
> @@ -982,6 +982,9 @@ struct target_rtc_pll_info {
> 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)
> diff --git a/linux-user/syscall_types.h b/linux-user/syscall_types.h
> index 2f5bad808e..fd6a91a309 100644
> --- a/linux-user/syscall_types.h
> +++ b/linux-user/syscall_types.h
> @@ -373,6 +373,33 @@ STRUCT(btrfs_ioctl_ino_lookup_user_args,
> MK_ARRAY(TYPE_CHAR, BTRFS_VOL_NAME_MAX + 1), /* name */
> MK_ARRAY(TYPE_CHAR, BTRFS_INO_LOOKUP_USER_PATH_MAX)) /* path */
>
> +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 */
> +
> STRUCT(btrfs_ioctl_dev_info_args,
> TYPE_ULONGLONG, /* devid */
> MK_ARRAY(TYPE_CHAR, BTRFS_UUID_SIZE), /* uuid */
>
Applied to my linux-user-for-5.2 branch.
Thanks,
Laurent
- [PATCH v2 4/8] linux-user: Add support for btrfs ioctls used to get/set features, (continued)
- [PATCH v2 4/8] linux-user: Add support for btrfs ioctls used to get/set features, Filip Bozuta, 2020/08/03
- [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
- Re: [PATCH v2 8/8] linux-user: Add support for btrfs ioctls used to scrub a filesystem,
Laurent Vivier <=