qemu-devel
[Top][All Lists]
Advanced

[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




reply via email to

[Prev in Thread] Current Thread [Next in Thread]