On 3/17/25 7:57 AM, 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. > > Signed-off-by: Sidong Yang <sidong.yang@xxxxxxxxxx> > --- > fs/btrfs/ioctl.c | 32 ++++++++++++++++++++++++-------- > 1 file changed, 24 insertions(+), 8 deletions(-) > > diff --git a/fs/btrfs/ioctl.c b/fs/btrfs/ioctl.c > index 6c18bad53cd3..a7b52fd99059 100644 > --- a/fs/btrfs/ioctl.c > +++ b/fs/btrfs/ioctl.c > @@ -4802,6 +4802,28 @@ struct btrfs_uring_encoded_data { > struct iov_iter iter; > }; > > +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 && (cmd->flags & IORING_URING_CMD_FIXED)) { > + data->iov = NULL; > + ret = io_uring_cmd_import_fixed_vec(cmd, data->args.iov, > + data->args.iovcnt, > + ITER_DEST, issue_flags, > + &data->iter); > + } 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; > +} How can 'cmd' be NULL here? -- Jens Axboe