* [PATCH 0/2] nvme-passthru with vectored-io [not found] <CGME20220127083033epcas5p3ce9565e4b5e21e897571e48e73e4f9af@epcas5p3.samsung.com> @ 2022-01-27 8:25 ` Kanchan Joshi [not found] ` <CGME20220127083034epcas5p4aaafaf1f40c21a383e985d6f6568cbef@epcas5p4.samsung.com> [not found] ` <CGME20220127083035epcas5p3e3760849513fb7939757f4e6678405a0@epcas5p3.samsung.com> 0 siblings, 2 replies; 9+ messages in thread From: Kanchan Joshi @ 2022-01-27 8:25 UTC (permalink / raw) To: hch, kbusch, axboe; +Cc: linux-nvme, linux-block, joshiiitr NVMe passthru takes a single buffer pointer. This enables using multiple buffers for passthru, similiar to readv/writev. First patch is prep, while second one adds vectored-io abililty to NVME_IOCTL_IO64_CMD. Kanchan Joshi (2): block: introduce and export blk_rq_map_user_vec nvme: add vectored-io support for user passthru block/blk-map.c | 19 +++++++++++++++++++ drivers/nvme/host/ioctl.c | 9 ++++++--- include/linux/blk-mq.h | 2 ++ include/uapi/linux/nvme_ioctl.h | 4 ++++ 4 files changed, 31 insertions(+), 3 deletions(-) -- 2.25.1 ^ permalink raw reply [flat|nested] 9+ messages in thread
[parent not found: <CGME20220127083034epcas5p4aaafaf1f40c21a383e985d6f6568cbef@epcas5p4.samsung.com>]
* [PATCH 1/2] block: introduce and export blk_rq_map_user_vec [not found] ` <CGME20220127083034epcas5p4aaafaf1f40c21a383e985d6f6568cbef@epcas5p4.samsung.com> @ 2022-01-27 8:25 ` Kanchan Joshi 2022-01-27 9:27 ` Christoph Hellwig 2022-01-28 9:04 ` Chaitanya Kulkarni 0 siblings, 2 replies; 9+ messages in thread From: Kanchan Joshi @ 2022-01-27 8:25 UTC (permalink / raw) To: hch, kbusch, axboe; +Cc: linux-nvme, linux-block, joshiiitr Similiar to blk_rq_map_user except that it operates on iovec. This is a prep patch. Signed-off-by: Kanchan Joshi <joshi.k@samsung.com> Signed-off-by: Anuj Gupta <anuj20.g@samsung.com> --- block/blk-map.c | 19 +++++++++++++++++++ include/linux/blk-mq.h | 2 ++ 2 files changed, 21 insertions(+) diff --git a/block/blk-map.c b/block/blk-map.c index 4526adde0156..7fe45df3e580 100644 --- a/block/blk-map.c +++ b/block/blk-map.c @@ -577,6 +577,25 @@ int blk_rq_map_user(struct request_queue *q, struct request *rq, } EXPORT_SYMBOL(blk_rq_map_user); +int blk_rq_map_user_vec(struct request_queue *q, struct request *rq, + struct rq_map_data *map_data, void __user *uvec, + unsigned long nr_vecs, gfp_t gfp_mask) +{ + struct iovec fast_iov[UIO_FASTIOV]; + struct iovec *iov = fast_iov; + struct iov_iter iter; + int ret; + + ret = import_iovec(rq_data_dir(rq), uvec, nr_vecs, UIO_FASTIOV, &iov, &iter); + if (unlikely(ret < 0)) + return ret; + ret = blk_rq_map_user_iov(q, rq, NULL, &iter, gfp_mask); + kfree(iov); + + return ret; +} +EXPORT_SYMBOL(blk_rq_map_user_vec); + /** * blk_rq_unmap_user - unmap a request with user data * @bio: start of bio list diff --git a/include/linux/blk-mq.h b/include/linux/blk-mq.h index d319ffa59354..0fda666d2230 100644 --- a/include/linux/blk-mq.h +++ b/include/linux/blk-mq.h @@ -966,6 +966,8 @@ struct rq_map_data { int blk_rq_map_user(struct request_queue *, struct request *, struct rq_map_data *, void __user *, unsigned long, gfp_t); +int blk_rq_map_user_vec(struct request_queue *, struct request *, + struct rq_map_data *, void __user *, unsigned long, gfp_t); int blk_rq_map_user_iov(struct request_queue *, struct request *, struct rq_map_data *, const struct iov_iter *, gfp_t); int blk_rq_unmap_user(struct bio *); -- 2.25.1 ^ permalink raw reply related [flat|nested] 9+ messages in thread
* Re: [PATCH 1/2] block: introduce and export blk_rq_map_user_vec 2022-01-27 8:25 ` [PATCH 1/2] block: introduce and export blk_rq_map_user_vec Kanchan Joshi @ 2022-01-27 9:27 ` Christoph Hellwig 2022-01-27 14:38 ` Kanchan Joshi 2022-01-28 9:04 ` Chaitanya Kulkarni 1 sibling, 1 reply; 9+ messages in thread From: Christoph Hellwig @ 2022-01-27 9:27 UTC (permalink / raw) To: Kanchan Joshi; +Cc: hch, kbusch, axboe, linux-nvme, linux-block, joshiiitr On Thu, Jan 27, 2022 at 01:55:35PM +0530, Kanchan Joshi wrote: > Similiar to blk_rq_map_user except that it operates on iovec. > This is a prep patch. > > Signed-off-by: Kanchan Joshi <joshi.k@samsung.com> > Signed-off-by: Anuj Gupta <anuj20.g@samsung.com> > --- > block/blk-map.c | 19 +++++++++++++++++++ > include/linux/blk-mq.h | 2 ++ > 2 files changed, 21 insertions(+) > > diff --git a/block/blk-map.c b/block/blk-map.c > index 4526adde0156..7fe45df3e580 100644 > --- a/block/blk-map.c > +++ b/block/blk-map.c > @@ -577,6 +577,25 @@ int blk_rq_map_user(struct request_queue *q, struct request *rq, > } > EXPORT_SYMBOL(blk_rq_map_user); > > +int blk_rq_map_user_vec(struct request_queue *q, struct request *rq, > + struct rq_map_data *map_data, void __user *uvec, > + unsigned long nr_vecs, gfp_t gfp_mask) > +{ > + struct iovec fast_iov[UIO_FASTIOV]; > + struct iovec *iov = fast_iov; > + struct iov_iter iter; > + int ret; > + > + ret = import_iovec(rq_data_dir(rq), uvec, nr_vecs, UIO_FASTIOV, &iov, &iter); > + if (unlikely(ret < 0)) > + return ret; > + ret = blk_rq_map_user_iov(q, rq, NULL, &iter, gfp_mask); > + kfree(iov); > + > + return ret; I see very little point in adding this function vs just open coding it. Also please don't add overly long lines. ^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH 1/2] block: introduce and export blk_rq_map_user_vec 2022-01-27 9:27 ` Christoph Hellwig @ 2022-01-27 14:38 ` Kanchan Joshi 0 siblings, 0 replies; 9+ messages in thread From: Kanchan Joshi @ 2022-01-27 14:38 UTC (permalink / raw) To: Christoph Hellwig Cc: Kanchan Joshi, Keith Busch, Jens Axboe, linux-nvme, linux-block On Thu, Jan 27, 2022 at 2:57 PM Christoph Hellwig <hch@lst.de> wrote: > > On Thu, Jan 27, 2022 at 01:55:35PM +0530, Kanchan Joshi wrote: > > Similiar to blk_rq_map_user except that it operates on iovec. > > This is a prep patch. > > > > Signed-off-by: Kanchan Joshi <joshi.k@samsung.com> > > Signed-off-by: Anuj Gupta <anuj20.g@samsung.com> > > --- > > block/blk-map.c | 19 +++++++++++++++++++ > > include/linux/blk-mq.h | 2 ++ > > 2 files changed, 21 insertions(+) > > > > diff --git a/block/blk-map.c b/block/blk-map.c > > index 4526adde0156..7fe45df3e580 100644 > > --- a/block/blk-map.c > > +++ b/block/blk-map.c > > @@ -577,6 +577,25 @@ int blk_rq_map_user(struct request_queue *q, struct request *rq, > > } > > EXPORT_SYMBOL(blk_rq_map_user); > > > > +int blk_rq_map_user_vec(struct request_queue *q, struct request *rq, > > + struct rq_map_data *map_data, void __user *uvec, > > + unsigned long nr_vecs, gfp_t gfp_mask) > > +{ > > + struct iovec fast_iov[UIO_FASTIOV]; > > + struct iovec *iov = fast_iov; > > + struct iov_iter iter; > > + int ret; > > + > > + ret = import_iovec(rq_data_dir(rq), uvec, nr_vecs, UIO_FASTIOV, &iov, &iter); > > + if (unlikely(ret < 0)) > > + return ret; > > + ret = blk_rq_map_user_iov(q, rq, NULL, &iter, gfp_mask); > > + kfree(iov); > > + > > + return ret; > > I see very little point in adding this function vs just open coding it. Fine, I will kill this and open-code in nvme instead. -- Kanchan ^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH 1/2] block: introduce and export blk_rq_map_user_vec 2022-01-27 8:25 ` [PATCH 1/2] block: introduce and export blk_rq_map_user_vec Kanchan Joshi 2022-01-27 9:27 ` Christoph Hellwig @ 2022-01-28 9:04 ` Chaitanya Kulkarni 1 sibling, 0 replies; 9+ messages in thread From: Chaitanya Kulkarni @ 2022-01-28 9:04 UTC (permalink / raw) To: Kanchan Joshi, hch, kbusch, axboe; +Cc: linux-nvme, linux-block, joshiiitr On 1/27/22 12:25 AM, Kanchan Joshi wrote: > External email: Use caution opening links or attachments > > > Similiar to blk_rq_map_user except that it operates on iovec. > This is a prep patch. > > Signed-off-by: Kanchan Joshi <joshi.k@samsung.com> > Signed-off-by: Anuj Gupta <anuj20.g@samsung.com> > --- Did you run checkpatch.pl ? ^ permalink raw reply [flat|nested] 9+ messages in thread
[parent not found: <CGME20220127083035epcas5p3e3760849513fb7939757f4e6678405a0@epcas5p3.samsung.com>]
* [PATCH 2/2] nvme: add vectored-io support for user passthru [not found] ` <CGME20220127083035epcas5p3e3760849513fb7939757f4e6678405a0@epcas5p3.samsung.com> @ 2022-01-27 8:25 ` Kanchan Joshi 2022-01-27 9:29 ` Christoph Hellwig 0 siblings, 1 reply; 9+ messages in thread From: Kanchan Joshi @ 2022-01-27 8:25 UTC (permalink / raw) To: hch, kbusch, axboe; +Cc: linux-nvme, linux-block, joshiiitr wire up support for passthru that takes an array of buffers (using iovec). Enable it for NVME_IOCTL_IO64_CMD; same ioctl code to be used with following differences - 1. NVME_IOVEC to be set as cmd.flags 2. cmd.addr, base addr of user iovec array 3. cmd.data_len, count of iovec array elements Signed-off-by: Kanchan Joshi <joshi.k@samsung.com> --- drivers/nvme/host/ioctl.c | 9 ++++++--- include/uapi/linux/nvme_ioctl.h | 4 ++++ 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/drivers/nvme/host/ioctl.c b/drivers/nvme/host/ioctl.c index 22314962842d..3a896443e110 100644 --- a/drivers/nvme/host/ioctl.c +++ b/drivers/nvme/host/ioctl.c @@ -65,6 +65,7 @@ static int nvme_submit_user_cmd(struct request_queue *q, struct bio *bio = NULL; void *meta = NULL; int ret; + u8 cmd_flags = cmd->common.flags; req = nvme_alloc_request(q, cmd, 0); if (IS_ERR(req)) @@ -75,7 +76,11 @@ static int nvme_submit_user_cmd(struct request_queue *q, nvme_req(req)->flags |= NVME_REQ_USERCMD; if (ubuffer && bufflen) { - ret = blk_rq_map_user(q, req, NULL, ubuffer, bufflen, + if (!(cmd_flags & NVME_IOVEC)) + ret = blk_rq_map_user(q, req, NULL, ubuffer, bufflen, + GFP_KERNEL); + else + ret = blk_rq_map_user_vec(q, req, NULL, ubuffer, bufflen, GFP_KERNEL); if (ret) goto out; @@ -246,8 +251,6 @@ static int nvme_user_cmd64(struct nvme_ctrl *ctrl, struct nvme_ns *ns, return -EACCES; if (copy_from_user(&cmd, ucmd, sizeof(cmd))) return -EFAULT; - if (cmd.flags) - return -EINVAL; if (!nvme_validate_passthru_nsid(ctrl, ns, cmd.nsid)) return -EINVAL; diff --git a/include/uapi/linux/nvme_ioctl.h b/include/uapi/linux/nvme_ioctl.h index d99b5a772698..d4999e3930f8 100644 --- a/include/uapi/linux/nvme_ioctl.h +++ b/include/uapi/linux/nvme_ioctl.h @@ -9,6 +9,10 @@ #include <linux/types.h> +enum nvme_ioc_flags { + NVME_IOVEC = 1 << 0 /* vectored io */ +}; + struct nvme_user_io { __u8 opcode; __u8 flags; -- 2.25.1 ^ permalink raw reply related [flat|nested] 9+ messages in thread
* Re: [PATCH 2/2] nvme: add vectored-io support for user passthru 2022-01-27 8:25 ` [PATCH 2/2] nvme: add vectored-io support for user passthru Kanchan Joshi @ 2022-01-27 9:29 ` Christoph Hellwig 2022-01-27 14:43 ` Kanchan Joshi 0 siblings, 1 reply; 9+ messages in thread From: Christoph Hellwig @ 2022-01-27 9:29 UTC (permalink / raw) To: Kanchan Joshi; +Cc: hch, kbusch, axboe, linux-nvme, linux-block, joshiiitr On Thu, Jan 27, 2022 at 01:55:36PM +0530, Kanchan Joshi wrote: > wire up support for passthru that takes an array of buffers (using > iovec). Enable it for NVME_IOCTL_IO64_CMD; same ioctl code to be used > with following differences - Flags overloading for a completely different ABI is a bad idea. Please add a separate ioctl instead. ^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH 2/2] nvme: add vectored-io support for user passthru 2022-01-27 9:29 ` Christoph Hellwig @ 2022-01-27 14:43 ` Kanchan Joshi 2022-01-28 9:08 ` Chaitanya Kulkarni 0 siblings, 1 reply; 9+ messages in thread From: Kanchan Joshi @ 2022-01-27 14:43 UTC (permalink / raw) To: Christoph Hellwig Cc: Kanchan Joshi, Keith Busch, Jens Axboe, linux-nvme, linux-block On Thu, Jan 27, 2022 at 2:59 PM Christoph Hellwig <hch@lst.de> wrote: > > On Thu, Jan 27, 2022 at 01:55:36PM +0530, Kanchan Joshi wrote: > > wire up support for passthru that takes an array of buffers (using > > iovec). Enable it for NVME_IOCTL_IO64_CMD; same ioctl code to be used > > with following differences - > > Flags overloading for a completely different ABI is a bad idea. > Please add a separate ioctl instead. Hope "NVME_IOCTL_IO64_VEC_CMD" sounds fine for the new one? -- Kanchan ^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH 2/2] nvme: add vectored-io support for user passthru 2022-01-27 14:43 ` Kanchan Joshi @ 2022-01-28 9:08 ` Chaitanya Kulkarni 0 siblings, 0 replies; 9+ messages in thread From: Chaitanya Kulkarni @ 2022-01-28 9:08 UTC (permalink / raw) To: Kanchan Joshi, Christoph Hellwig Cc: Kanchan Joshi, Keith Busch, Jens Axboe, linux-nvme, linux-block Flags overloading for a completely different ABI is a bad idea. >> Please add a separate ioctl instead. > > Hope "NVME_IOCTL_IO64_VEC_CMD" sounds fine for the new one? > sounds reasonable to me.. > -- > Kanchan > ^ permalink raw reply [flat|nested] 9+ messages in thread
end of thread, other threads:[~2022-01-28 9:08 UTC | newest] Thread overview: 9+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- [not found] <CGME20220127083033epcas5p3ce9565e4b5e21e897571e48e73e4f9af@epcas5p3.samsung.com> 2022-01-27 8:25 ` [PATCH 0/2] nvme-passthru with vectored-io Kanchan Joshi [not found] ` <CGME20220127083034epcas5p4aaafaf1f40c21a383e985d6f6568cbef@epcas5p4.samsung.com> 2022-01-27 8:25 ` [PATCH 1/2] block: introduce and export blk_rq_map_user_vec Kanchan Joshi 2022-01-27 9:27 ` Christoph Hellwig 2022-01-27 14:38 ` Kanchan Joshi 2022-01-28 9:04 ` Chaitanya Kulkarni [not found] ` <CGME20220127083035epcas5p3e3760849513fb7939757f4e6678405a0@epcas5p3.samsung.com> 2022-01-27 8:25 ` [PATCH 2/2] nvme: add vectored-io support for user passthru Kanchan Joshi 2022-01-27 9:29 ` Christoph Hellwig 2022-01-27 14:43 ` Kanchan Joshi 2022-01-28 9:08 ` Chaitanya Kulkarni
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.