On Wed, Aug 02, 2023 at 11:09:56AM +0200, Andreas Hindborg (Samsung) wrote: > > Ming Lei <ming.lei@xxxxxxxxxx> writes: > > > On Tue, Aug 01, 2023 at 02:11:56PM +0200, Andreas Hindborg (Samsung) wrote: > >> > >> Niklas Cassel <Niklas.Cassel@xxxxxxx> writes: > >> > >> > On Fri, Jul 14, 2023 at 09:25:10AM +0200, Andreas Hindborg wrote: > >> >> From: Andreas Hindborg <a.hindborg@xxxxxxxxxxx> > >> > > >> > Hello Andreas! > >> > > >> > >> <snip> > >> > >> >> /* for READ request, writing data in iod->addr to rq buffers */ > >> >> @@ -1120,6 +1404,11 @@ static void ublk_commit_completion(struct ublk_device *ub, > >> >> /* find the io request and complete */ > >> >> req = blk_mq_tag_to_rq(ub->tag_set.tags[qid], tag); > >> >> > >> >> + if (io->flags & UBLK_IO_FLAG_ZONE_APPEND) { > >> > > >> > Do we really need to introduce a completely new flag just for this? > >> > > >> > if (req_op(req) == REQ_OP_ZONE_APPEND) > >> > > >> > should work just as well, no? > >> > >> Makes sense, thanks. > > > > The above one can be replaced with req_op(). > > > > But extra cost is added when retrieving request for the check in > > __ublk_ch_uring_cmd(). > > > > How about this (diff to v9): > > @@ -1709,7 +1702,7 @@ static int __ublk_ch_uring_cmd(struct io_uring_cmd *cmd, > goto out; > > if (ublk_support_user_copy(ubq) && > - !(io->flags & UBLK_IO_FLAG_ZONE_APPEND) && ub_cmd->addr) { > + _IOC_NR(cmd_op) != UBLK_IO_COMMIT_AND_FETCH_REQ && ub_cmd->addr) { > ret = -EINVAL; > goto out; > } Let's merge the above original user_copy check into 'case UBLK_IO_FETCH_REQ' & 'case UBLK_IO_COMMIT_AND_FETCH_REQ' first, then this patch can be cleaner, which can be done as one prep change for zoned support. > @@ -1751,6 +1744,12 @@ static int __ublk_ch_uring_cmd(struct io_uring_cmd *cmd, > if (!(io->flags & UBLK_IO_FLAG_OWNED_BY_SRV)) > goto out; > > + if (ublk_support_user_copy(ubq) && > + req_op(req) != REQ_OP_ZONE_APPEND && ub_cmd->addr) { > + ret = -EINVAL; > + goto out; > + } > + Given request is available for UBLK_IO_COMMIT_AND_FETCH_REQ, this approach is good, and UBLK_IO_FETCH_REQ cmd doesn't have OP. Thanks, Ming