On Mon, Apr 28, 2025 at 09:28:07AM -0700, Caleb Sander Mateos wrote: > On Sun, Apr 27, 2025 at 6:50 AM Ming Lei <ming.lei@xxxxxxxxxx> wrote: > > > > The simple check of UBLK_IO_FLAG_OWNED_BY_SRV can avoid incorrect > > register/unregister io buffer easily, so check it before calling > > starting to register/un-register io buffer. > > > > Also only allow io buffer register/unregister uring_cmd in case of > > UBLK_F_SUPPORT_ZERO_COPY. > > > > Also mark argument 'ublk_queue *' of ublk_register_io_buf as const. > > > > Fixes: 1f6540e2aabb ("ublk: zc register/unregister bvec") > > Signed-off-by: Ming Lei <ming.lei@xxxxxxxxxx> > > --- > > drivers/block/ublk_drv.c | 24 ++++++++++++++++++++---- > > 1 file changed, 20 insertions(+), 4 deletions(-) > > > > diff --git a/drivers/block/ublk_drv.c b/drivers/block/ublk_drv.c > > index 0a3a3c64316d..c624d8f653ae 100644 > > --- a/drivers/block/ublk_drv.c > > +++ b/drivers/block/ublk_drv.c > > @@ -201,7 +201,7 @@ struct ublk_params_header { > > static void ublk_stop_dev_unlocked(struct ublk_device *ub); > > static void ublk_abort_queue(struct ublk_device *ub, struct ublk_queue *ubq); > > static inline struct request *__ublk_check_and_get_req(struct ublk_device *ub, > > - struct ublk_queue *ubq, int tag, size_t offset); > > + const struct ublk_queue *ubq, int tag, size_t offset); > > static inline unsigned int ublk_req_build_flags(struct request *req); > > static inline struct ublksrv_io_desc *ublk_get_iod(struct ublk_queue *ubq, > > int tag); > > @@ -1949,13 +1949,20 @@ static void ublk_io_release(void *priv) > > } > > > > static int ublk_register_io_buf(struct io_uring_cmd *cmd, > > - struct ublk_queue *ubq, unsigned int tag, > > + const struct ublk_queue *ubq, unsigned int tag, > > unsigned int index, unsigned int issue_flags) > > { > > struct ublk_device *ub = cmd->file->private_data; > > + const struct ublk_io *io = &ubq->ios[tag]; > > struct request *req; > > int ret; > > > > + if (!ublk_support_zero_copy(ubq)) > > + return -EINVAL; > > + > > + if (!(io->flags & UBLK_IO_FLAG_OWNED_BY_SRV)) > > + return -EINVAL; > > I would still prefer to see this common UBLK_IO_FLAG_OWNED_BY_SRV > check moved to __ublk_ch_uring_cmd() along with the existing flag > checks. Something like this: This way mixes bug fix with cleanup. We are close to v6.15-rc5, and bug fix should keep simple for minimizing regression. But it is fine to make it one cleanup aiming at v6.16. thanks, Ming