All of lore.kernel.org
 help / color / mirror / Atom feed
From: Pavel Begunkov <asml.silence@gmail.com>
To: Sidong Yang <sidong.yang@furiosa.ai>,
	Josef Bacik <josef@toxicpanda.com>,
	David Sterba <dsterba@suse.com>, Jens Axboe <axboe@kernel.dk>
Cc: linux-btrfs@vger.kernel.org, linux-kernel@vger.kernel.org,
	io-uring@vger.kernel.org
Subject: Re: [RFC PATCH v5 5/5] btrfs: ioctl: introduce btrfs_uring_import_iovec()
Date: Thu, 20 Mar 2025 12:01:42 +0000	[thread overview]
Message-ID: <14f5b4bc-e189-4b18-9fe6-a98c91e96d3d@gmail.com> (raw)
In-Reply-To: <20250319061251.21452-6-sidong.yang@furiosa.ai>

On 3/19/25 06:12, Sidong Yang wrote:
> This patch introduces btrfs_uring_import_iovec(). In encoded read/write
> with uring cmd, it uses import_iovec without supporting fixed buffer.
> btrfs_using_import_iovec() could use fixed buffer if cmd flags has
> IORING_URING_CMD_FIXED.

Looks fine to me. The only comment, it appears btrfs silently ignored
IORING_URING_CMD_FIXED before, so theoretically it changes the uapi.
It should be fine, but maybe we should sneak in and backport a patch
refusing the flag for older kernels?

Reviewed-by: Pavel Begunkov <asml.silence@gmail.com>

> 
> Signed-off-by: Sidong Yang <sidong.yang@furiosa.ai>
> ---
>   fs/btrfs/ioctl.c | 34 +++++++++++++++++++++++++---------
>   1 file changed, 25 insertions(+), 9 deletions(-)
> 
> diff --git a/fs/btrfs/ioctl.c b/fs/btrfs/ioctl.c
> index 6c18bad53cd3..e5b4af41ca6b 100644
> --- a/fs/btrfs/ioctl.c
> +++ b/fs/btrfs/ioctl.c
> @@ -4802,7 +4802,29 @@ struct btrfs_uring_encoded_data {
>   	struct iov_iter iter;
>   };
>   
> -static int btrfs_uring_encoded_read(struct io_uring_cmd *cmd, unsigned int issue_flags)
> +static int btrfs_uring_import_iovec(struct io_uring_cmd *cmd,
> +				    unsigned int issue_flags, int rw)
> +{
> +	struct btrfs_uring_encoded_data *data =
> +		io_uring_cmd_get_async_data(cmd)->op_data;
> +	int ret;
> +
> +	if (cmd->flags & IORING_URING_CMD_FIXED) {
> +		data->iov = NULL;
> +		ret = io_uring_cmd_import_fixed_vec(cmd, data->args.iov,
> +						    data->args.iovcnt, rw,
> +						    &data->iter, issue_flags);
> +	} else {
> +		data->iov = data->iovstack;
> +		ret = import_iovec(rw, data->args.iov, data->args.iovcnt,
> +				   ARRAY_SIZE(data->iovstack), &data->iov,
> +				   &data->iter);
> +	}
> +	return ret;
> +}
> +
> +static int btrfs_uring_encoded_read(struct io_uring_cmd *cmd,
> +				    unsigned int issue_flags)
>   {
>   	size_t copy_end_kernel = offsetofend(struct btrfs_ioctl_encoded_io_args, flags);
>   	size_t copy_end;
> @@ -4874,10 +4896,7 @@ static int btrfs_uring_encoded_read(struct io_uring_cmd *cmd, unsigned int issue
>   			goto out_acct;
>   		}
>   
> -		data->iov = data->iovstack;
> -		ret = import_iovec(ITER_DEST, data->args.iov, data->args.iovcnt,
> -				   ARRAY_SIZE(data->iovstack), &data->iov,
> -				   &data->iter);
> +		ret = btrfs_uring_import_iovec(cmd, issue_flags, ITER_DEST);
>   		if (ret < 0)
>   			goto out_acct;
>   
> @@ -5022,10 +5041,7 @@ static int btrfs_uring_encoded_write(struct io_uring_cmd *cmd, unsigned int issu
>   		if (data->args.len > data->args.unencoded_len - data->args.unencoded_offset)
>   			goto out_acct;
>   
> -		data->iov = data->iovstack;
> -		ret = import_iovec(ITER_SOURCE, data->args.iov, data->args.iovcnt,
> -				   ARRAY_SIZE(data->iovstack), &data->iov,
> -				   &data->iter);
> +		ret = btrfs_uring_import_iovec(cmd, issue_flags, ITER_SOURCE);
>   		if (ret < 0)
>   			goto out_acct;
>   

-- 
Pavel Begunkov


  reply	other threads:[~2025-03-20 12:00 UTC|newest]

Thread overview: 20+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2025-03-19  6:12 [RFC PATCH v5 0/5] introduce io_uring_cmd_import_fixed_vec Sidong Yang
2025-03-19  6:12 ` [RFC PATCH v5 1/5] io_uring: rename the data cmd cache Sidong Yang
2025-03-19  6:12 ` [RFC PATCH v5 2/5] io_uring/cmd: don't expose entire cmd async data Sidong Yang
2025-03-19  6:12 ` [RFC PATCH v5 3/5] io_uring/cmd: add iovec cache for commands Sidong Yang
2025-03-19  6:12 ` [RFC PATCH v5 4/5] io_uring/cmd: introduce io_uring_cmd_import_fixed_vec Sidong Yang
2025-03-19  6:12 ` [RFC PATCH v5 5/5] btrfs: ioctl: introduce btrfs_uring_import_iovec() Sidong Yang
2025-03-20 12:01   ` Pavel Begunkov [this message]
2025-03-20 16:19     ` Sidong Yang
2025-03-21 10:28       ` Pavel Begunkov
2025-03-21 11:17         ` Jens Axboe
2025-03-22 15:23           ` Sidong Yang
2025-03-19 15:26 ` (subset) [RFC PATCH v5 0/5] introduce io_uring_cmd_import_fixed_vec Jens Axboe
2025-03-19 15:27   ` Jens Axboe
2025-03-19 17:07     ` David Sterba
2025-03-19 17:10       ` Jens Axboe
2025-03-20  1:47         ` Sidong Yang
2025-03-20 12:04           ` Pavel Begunkov
2025-03-20 16:10             ` Sidong Yang
2025-03-21  9:56               ` Pavel Begunkov
2025-03-20 11:53     ` Pavel Begunkov

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=14f5b4bc-e189-4b18-9fe6-a98c91e96d3d@gmail.com \
    --to=asml.silence@gmail.com \
    --cc=axboe@kernel.dk \
    --cc=dsterba@suse.com \
    --cc=io-uring@vger.kernel.org \
    --cc=josef@toxicpanda.com \
    --cc=linux-btrfs@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=sidong.yang@furiosa.ai \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.