Re: [PATCH RFC v2 1/4] fs: add helper to use mount option as path or fd

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Fri, Oct 11, 2024 at 11:46 PM Christian Brauner <brauner@xxxxxxxxxx> wrote:
>
> Allow filesystems to use a mount option either as a
> path or a file descriptor.
>
> Signed-off-by: Christian Brauner <brauner@xxxxxxxxxx>

Looks sane

Reviewed-by: Amir Goldstein <amir73il@xxxxxxxxx>

> ---
>  fs/fs_parser.c            | 19 +++++++++++++++++++
>  include/linux/fs_parser.h |  5 ++++-
>  2 files changed, 23 insertions(+), 1 deletion(-)
>
> diff --git a/fs/fs_parser.c b/fs/fs_parser.c
> index 24727ec34e5aa434364e87879cccf9fe1ec19d37..a017415d8d6bc91608ece5d42fa4bea26e47456b 100644
> --- a/fs/fs_parser.c
> +++ b/fs/fs_parser.c
> @@ -308,6 +308,25 @@ int fs_param_is_fd(struct p_log *log, const struct fs_parameter_spec *p,
>  }
>  EXPORT_SYMBOL(fs_param_is_fd);
>
> +int fs_param_is_fd_or_path(struct p_log *log, const struct fs_parameter_spec *p,
> +                          struct fs_parameter *param,
> +                          struct fs_parse_result *result)
> +{
> +       switch (param->type) {
> +       case fs_value_is_string:
> +               return fs_param_is_string(log, p, param, result);
> +       case fs_value_is_file:
> +               result->uint_32 = param->dirfd;
> +               if (result->uint_32 <= INT_MAX)
> +                       return 0;
> +               break;
> +       default:
> +               break;
> +       }
> +       return fs_param_bad_value(log, param);
> +}
> +EXPORT_SYMBOL(fs_param_is_fd_or_path);
> +
>  int fs_param_is_uid(struct p_log *log, const struct fs_parameter_spec *p,
>                     struct fs_parameter *param, struct fs_parse_result *result)
>  {
> diff --git a/include/linux/fs_parser.h b/include/linux/fs_parser.h
> index 6cf713a7e6c6fc2402a68c87036264eaed921432..73fe4e119ee24b3bed1f0cf2bc23d6b31811cb69 100644
> --- a/include/linux/fs_parser.h
> +++ b/include/linux/fs_parser.h
> @@ -28,7 +28,8 @@ typedef int fs_param_type(struct p_log *,
>   */
>  fs_param_type fs_param_is_bool, fs_param_is_u32, fs_param_is_s32, fs_param_is_u64,
>         fs_param_is_enum, fs_param_is_string, fs_param_is_blob, fs_param_is_blockdev,
> -       fs_param_is_path, fs_param_is_fd, fs_param_is_uid, fs_param_is_gid;
> +       fs_param_is_path, fs_param_is_fd, fs_param_is_uid, fs_param_is_gid,
> +       fs_param_is_fd_or_path;
>
>  /*
>   * Specification of the type of value a parameter wants.
> @@ -133,6 +134,8 @@ static inline bool fs_validate_description(const char *name,
>  #define fsparam_bdev(NAME, OPT)        __fsparam(fs_param_is_blockdev, NAME, OPT, 0, NULL)
>  #define fsparam_path(NAME, OPT)        __fsparam(fs_param_is_path, NAME, OPT, 0, NULL)
>  #define fsparam_fd(NAME, OPT)  __fsparam(fs_param_is_fd, NAME, OPT, 0, NULL)
> +#define fsparam_fd_or_path(NAME, OPT) \
> +                               __fsparam(fs_param_is_fd_or_path, NAME, OPT, 0, NULL)
>  #define fsparam_uid(NAME, OPT) __fsparam(fs_param_is_uid, NAME, OPT, 0, NULL)
>  #define fsparam_gid(NAME, OPT) __fsparam(fs_param_is_gid, NAME, OPT, 0, NULL)
>
>
> --
> 2.45.2
>





[Index of Archives]     [Linux Filesystems Devel]     [Linux NFS]     [Linux NILFS]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux