All of lore.kernel.org
 help / color / mirror / Atom feed
From: Ming Lei <ming.lei@redhat.com>
To: Caleb Sander Mateos <csander@purestorage.com>
Cc: Jens Axboe <axboe@kernel.dk>,
	linux-block@vger.kernel.org,
	Uday Shankar <ushankar@purestorage.com>
Subject: Re: [PATCH V3 09/27] ublk: add new batch command UBLK_U_IO_PREP_IO_CMDS & UBLK_U_IO_COMMIT_IO_CMDS
Date: Wed, 19 Nov 2025 17:49:26 +0800	[thread overview]
Message-ID: <aR2SpkBWHm800dmm@fedora> (raw)
In-Reply-To: <CADUfDZo0NB39mgp-4zpL63bGi6WtsEsfxZ95Jrj6RBqQ60NZug@mail.gmail.com>

On Tue, Nov 18, 2025 at 06:39:09PM -0800, Caleb Sander Mateos wrote:
> On Tue, Nov 18, 2025 at 6:37 PM Caleb Sander Mateos
> <csander@purestorage.com> wrote:
> >
> > On Wed, Nov 12, 2025 at 1:39 AM Ming Lei <ming.lei@redhat.com> wrote:
> > >
> > > Add new command UBLK_U_IO_PREP_IO_CMDS, which is the batch version of
> > > UBLK_IO_FETCH_REQ.
> > >
> > > Add new command UBLK_U_IO_COMMIT_IO_CMDS, which is for committing io command
> > > result only, still the batch version.
> > >
> > > The new command header type is `struct ublk_batch_io`, and fixed buffer is
> > > required for these two uring_cmd.
> > >
> > > This patch doesn't actually implement these commands yet, just validates the
> > > SQE fields.
> > >
> > > Signed-off-by: Ming Lei <ming.lei@redhat.com>
> > > ---
> > >  drivers/block/ublk_drv.c      | 107 +++++++++++++++++++++++++++++++++-
> > >  include/uapi/linux/ublk_cmd.h |  49 ++++++++++++++++
> > >  2 files changed, 155 insertions(+), 1 deletion(-)
> > >
> > > diff --git a/drivers/block/ublk_drv.c b/drivers/block/ublk_drv.c
> > > index c62b2f2057fe..5f9d7ec9daa4 100644
> > > --- a/drivers/block/ublk_drv.c
> > > +++ b/drivers/block/ublk_drv.c
> > > @@ -85,6 +85,11 @@
> > >          UBLK_PARAM_TYPE_DEVT | UBLK_PARAM_TYPE_ZONED |    \
> > >          UBLK_PARAM_TYPE_DMA_ALIGN | UBLK_PARAM_TYPE_SEGMENT)
> > >
> > > +#define UBLK_BATCH_F_ALL  \
> > > +       (UBLK_BATCH_F_HAS_ZONE_LBA | \
> > > +        UBLK_BATCH_F_HAS_BUF_ADDR | \
> > > +        UBLK_BATCH_F_AUTO_BUF_REG_FALLBACK)
> > > +
> > >  struct ublk_uring_cmd_pdu {
> > >         /*
> > >          * Store requests in same batch temporarily for queuing them to
> > > @@ -108,6 +113,12 @@ struct ublk_uring_cmd_pdu {
> > >         u16 tag;
> > >  };
> > >
> > > +struct ublk_batch_io_data {
> > > +       struct ublk_device *ub;
> > > +       struct io_uring_cmd *cmd;
> > > +       struct ublk_batch_io header;
> > > +};
> > > +
> > >  /*
> > >   * io command is active: sqe cmd is received, and its cqe isn't done
> > >   *
> > > @@ -2520,10 +2531,104 @@ static int ublk_ch_uring_cmd(struct io_uring_cmd *cmd, unsigned int issue_flags)
> > >         return ublk_ch_uring_cmd_local(cmd, issue_flags);
> > >  }
> > >
> > > +static int ublk_check_batch_cmd_flags(const struct ublk_batch_io *uc)
> > > +{
> > > +       const u16 mask = UBLK_BATCH_F_HAS_BUF_ADDR | UBLK_BATCH_F_HAS_ZONE_LBA;
> > > +       const unsigned header_len = sizeof(struct ublk_elem_header);
> > > +
> > > +       if (uc->flags & ~UBLK_BATCH_F_ALL)
> > > +               return -EINVAL;
> > > +
> > > +       /* UBLK_BATCH_F_AUTO_BUF_REG_FALLBACK requires buffer index */
> > > +       if ((uc->flags & UBLK_BATCH_F_AUTO_BUF_REG_FALLBACK) &&
> > > +                       (uc->flags & UBLK_BATCH_F_HAS_BUF_ADDR))
> > > +               return -EINVAL;
> > > +
> > > +       switch (uc->flags & mask) {
> > > +       case 0:
> > > +               if (uc->elem_bytes != header_len)
> > > +                       return -EINVAL;
> > > +               break;
> > > +       case UBLK_BATCH_F_HAS_ZONE_LBA:
> > > +       case UBLK_BATCH_F_HAS_BUF_ADDR:
> > > +               if (uc->elem_bytes != header_len + sizeof(u64))
> > > +                       return -EINVAL;
> > > +               break;
> > > +       case UBLK_BATCH_F_HAS_ZONE_LBA | UBLK_BATCH_F_HAS_BUF_ADDR:
> > > +               if (uc->elem_bytes != header_len + sizeof(u64) + sizeof(u64))
> > > +                       return -EINVAL;
> > > +               break;
> > > +       }
> > > +
> > > +       return 0;
> > > +}
> > > +
> > > +static int ublk_check_batch_cmd(const struct ublk_batch_io_data *data)
> > > +{
> > > +
> > > +       const struct ublk_batch_io *uc = &data->header;
> > > +
> > > +       if (!(data->cmd->flags & IORING_URING_CMD_FIXED))
> > > +               return -EINVAL;
> > > +
> > > +       if (uc->nr_elem * uc->elem_bytes > data->cmd->sqe->len)
> >
> > sqe->len should be accessed with READ_ONCE() since it may point to
> > user-mapped memory.
> 
> Actually, is there any point in this check since sqe->len is no longer
> used anywhere?

Right, will remove it in next version.


Thanks, 
Ming


  reply	other threads:[~2025-11-19  9:49 UTC|newest]

Thread overview: 49+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2025-11-12  9:37 [PATCH V3 00/27] ublk: add UBLK_F_BATCH_IO Ming Lei
2025-11-12  9:37 ` [PATCH V3 01/27] kfifo: add kfifo_alloc_node() helper for NUMA awareness Ming Lei
2025-11-12 19:29   ` Andrew Morton
2025-11-13  1:21     ` Ming Lei
2025-11-13 22:06       ` Andrew Morton
2025-11-15  4:14   ` Caleb Sander Mateos
2025-11-16 11:59     ` Ming Lei
2025-11-12  9:37 ` [PATCH V3 02/27] ublk: add parameter `struct io_uring_cmd *` to ublk_prep_auto_buf_reg() Ming Lei
2025-11-12  9:37 ` [PATCH V3 03/27] ublk: add `union ublk_io_buf` with improved naming Ming Lei
2025-11-12  9:37 ` [PATCH V3 04/27] ublk: refactor auto buffer register in ublk_dispatch_req() Ming Lei
2025-11-15  5:10   ` Caleb Sander Mateos
2025-11-12  9:37 ` [PATCH V3 05/27] ublk: pass const pointer to ublk_queue_is_zoned() Ming Lei
2025-11-15  5:11   ` Caleb Sander Mateos
2025-11-12  9:37 ` [PATCH V3 06/27] ublk: add helper of __ublk_fetch() Ming Lei
2025-11-15  5:21   ` Caleb Sander Mateos
2025-11-16 12:02     ` Ming Lei
2025-11-17 18:29       ` Caleb Sander Mateos
2025-11-12  9:37 ` [PATCH V3 07/27] ublk: define ublk_ch_batch_io_fops for the coming feature F_BATCH_IO Ming Lei
2025-11-12  9:37 ` [PATCH V3 08/27] ublk: prepare for not tracking task context for command batch Ming Lei
2025-11-15  5:25   ` Caleb Sander Mateos
2025-11-16 12:02     ` Ming Lei
2025-11-12  9:37 ` [PATCH V3 09/27] ublk: add new batch command UBLK_U_IO_PREP_IO_CMDS & UBLK_U_IO_COMMIT_IO_CMDS Ming Lei
2025-11-17 21:08   ` Caleb Sander Mateos
2025-11-18  2:11     ` Ming Lei
2025-11-18  2:38       ` Caleb Sander Mateos
2025-11-19  2:37   ` Caleb Sander Mateos
2025-11-19  2:39     ` Caleb Sander Mateos
2025-11-19  9:49       ` Ming Lei [this message]
2025-11-12  9:37 ` [PATCH V3 10/27] ublk: handle UBLK_U_IO_PREP_IO_CMDS Ming Lei
2025-11-19  2:49   ` Caleb Sander Mateos
2025-11-19  9:56     ` Ming Lei
2025-11-19 16:09       ` Caleb Sander Mateos
2025-11-12  9:37 ` [PATCH V3 11/27] ublk: handle UBLK_U_IO_COMMIT_IO_CMDS Ming Lei
2025-11-12  9:37 ` [PATCH V3 12/27] ublk: add io events fifo structure Ming Lei
2025-11-12  9:37 ` [PATCH V3 13/27] ublk: add batch I/O dispatch infrastructure Ming Lei
2025-11-12  9:37 ` [PATCH V3 14/27] ublk: add UBLK_U_IO_FETCH_IO_CMDS for batch I/O processing Ming Lei
2025-11-12  9:37 ` [PATCH V3 15/27] ublk: abort requests filled in event kfifo Ming Lei
2025-11-12  9:37 ` [PATCH V3 16/27] ublk: add new feature UBLK_F_BATCH_IO Ming Lei
2025-11-12  9:37 ` [PATCH V3 17/27] ublk: document " Ming Lei
2025-11-12  9:37 ` [PATCH V3 18/27] ublk: implement batch request completion via blk_mq_end_request_batch() Ming Lei
2025-11-12  9:37 ` [PATCH V3 19/27] selftests: ublk: fix user_data truncation for tgt_data >= 256 Ming Lei
2025-11-12  9:37 ` [PATCH V3 20/27] selftests: ublk: replace assert() with ublk_assert() Ming Lei
2025-11-12  9:37 ` [PATCH V3 21/27] selftests: ublk: add ublk_io_buf_idx() for returning io buffer index Ming Lei
2025-11-12  9:38 ` [PATCH V3 22/27] selftests: ublk: add batch buffer management infrastructure Ming Lei
2025-11-12  9:38 ` [PATCH V3 23/27] selftests: ublk: handle UBLK_U_IO_PREP_IO_CMDS Ming Lei
2025-11-12  9:38 ` [PATCH V3 24/27] selftests: ublk: handle UBLK_U_IO_COMMIT_IO_CMDS Ming Lei
2025-11-12  9:38 ` [PATCH V3 25/27] selftests: ublk: handle UBLK_U_IO_FETCH_IO_CMDS Ming Lei
2025-11-12  9:38 ` [PATCH V3 26/27] selftests: ublk: add --batch/-b for enabling F_BATCH_IO Ming Lei
2025-11-12  9:38 ` [PATCH V3 27/27] selftests: ublk: support arbitrary threads/queues combination Ming Lei

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=aR2SpkBWHm800dmm@fedora \
    --to=ming.lei@redhat.com \
    --cc=axboe@kernel.dk \
    --cc=csander@purestorage.com \
    --cc=linux-block@vger.kernel.org \
    --cc=ushankar@purestorage.com \
    /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.