From: Kanchan Joshi <joshi.k@samsung.com> To: axboe@kernel.dk, hch@lst.de, kbusch@kernel.org Cc: io-uring@vger.kernel.org, linux-nvme@lists.infradead.org, anuj20.g@samsung.com, javier.gonz@samsung.com, hare@suse.de, Kanchan Joshi <joshi.k@samsung.com> Subject: [RFC PATCH 5/6] io_uring: add support for uring_cmd with fixed-buffer Date: Thu, 5 Aug 2021 18:25:38 +0530 [thread overview] Message-ID: <20210805125539.66958-6-joshi.k@samsung.com> (raw) In-Reply-To: <20210805125539.66958-1-joshi.k@samsung.com> From: Anuj Gupta <anuj20.g@samsung.com> Add IORING_OP_URING_CMD_FIXED opcode that enables performing the operation with previously registered buffers. Signed-off-by: Anuj Gupta <anuj20.g@samsung.com> Signed-off-by: Kanchan Joshi <joshi.k@samsung.com> --- fs/io_uring.c | 27 ++++++++++++++++++++++++++- include/uapi/linux/io_uring.h | 6 +++++- 2 files changed, 31 insertions(+), 2 deletions(-) diff --git a/fs/io_uring.c b/fs/io_uring.c index 1f2263a78c8e..a80f4c98ea86 100644 --- a/fs/io_uring.c +++ b/fs/io_uring.c @@ -1060,6 +1060,10 @@ static const struct io_op_def io_op_defs[] = { .needs_file = 1, .offsets = 1, }, + [IORING_OP_URING_CMD_FIXED] = { + .needs_file = 1, + .offsets = 1, + }, }; static bool io_disarm_next(struct io_kiocb *req); @@ -3602,7 +3606,12 @@ static int io_uring_cmd_prep(struct io_kiocb *req, } cmd->op = READ_ONCE(csqe->op); - cmd->len = READ_ONCE(csqe->len); + if (req->opcode == IORING_OP_URING_CMD_FIXED) { + req->imu = NULL; + io_req_set_rsrc_node(req); + req->buf_index = READ_ONCE(csqe->buf_index); + } else + cmd->len = READ_ONCE(csqe->len); /* * The payload is the last 40 bytes of an io_uring_cmd_sqe, with the @@ -3617,6 +3626,20 @@ static int io_uring_cmd(struct io_kiocb *req, unsigned int issue_flags) struct file *file = req->file; int ret; + if (req->opcode == IORING_OP_URING_CMD_FIXED) { + u32 index, buf_index = req->buf_index; + struct io_ring_ctx *ctx = req->ctx; + struct io_mapped_ubuf *imu = req->imu; + + if (likely(!imu)) { + if (unlikely(buf_index >= ctx->nr_user_bufs)) + return -EFAULT; + index = array_index_nospec(buf_index, ctx->nr_user_bufs); + imu = READ_ONCE(ctx->user_bufs[index]); + req->imu = imu; + } + } + ret = file->f_op->uring_cmd(&req->uring_cmd, issue_flags); /* queued async, consumer will call io_uring_cmd_done() when complete */ if (ret == -EIOCBQUEUED) @@ -6031,6 +6054,7 @@ static int io_req_prep(struct io_kiocb *req, const struct io_uring_sqe *sqe) case IORING_OP_UNLINKAT: return io_unlinkat_prep(req, sqe); case IORING_OP_URING_CMD: + case IORING_OP_URING_CMD_FIXED: return io_uring_cmd_prep(req, sqe); } @@ -6322,6 +6346,7 @@ static int io_issue_sqe(struct io_kiocb *req, unsigned int issue_flags) ret = io_unlinkat(req, issue_flags); break; case IORING_OP_URING_CMD: + case IORING_OP_URING_CMD_FIXED: ret = io_uring_cmd(req, issue_flags); break; default: diff --git a/include/uapi/linux/io_uring.h b/include/uapi/linux/io_uring.h index 92565e17bfd9..1a10ebd4ca0a 100644 --- a/include/uapi/linux/io_uring.h +++ b/include/uapi/linux/io_uring.h @@ -75,7 +75,10 @@ struct io_uring_cmd_sqe { __u64 user_data; __u16 op; __u16 personality; - __u32 len; + union { + __u32 len; + __u16 buf_index; + }; __u64 pdu[5]; }; @@ -154,6 +157,7 @@ enum { IORING_OP_RENAMEAT, IORING_OP_UNLINKAT, IORING_OP_URING_CMD, + IORING_OP_URING_CMD_FIXED, /* this goes last, obviously */ IORING_OP_LAST, -- 2.25.1
WARNING: multiple messages have this Message-ID (diff)
From: Kanchan Joshi <joshi.k@samsung.com> To: axboe@kernel.dk, hch@lst.de, kbusch@kernel.org Cc: io-uring@vger.kernel.org, linux-nvme@lists.infradead.org, anuj20.g@samsung.com, javier.gonz@samsung.com, hare@suse.de, Kanchan Joshi <joshi.k@samsung.com> Subject: [RFC PATCH 5/6] io_uring: add support for uring_cmd with fixed-buffer Date: Thu, 5 Aug 2021 18:25:38 +0530 [thread overview] Message-ID: <20210805125539.66958-6-joshi.k@samsung.com> (raw) In-Reply-To: <20210805125539.66958-1-joshi.k@samsung.com> From: Anuj Gupta <anuj20.g@samsung.com> Add IORING_OP_URING_CMD_FIXED opcode that enables performing the operation with previously registered buffers. Signed-off-by: Anuj Gupta <anuj20.g@samsung.com> Signed-off-by: Kanchan Joshi <joshi.k@samsung.com> --- fs/io_uring.c | 27 ++++++++++++++++++++++++++- include/uapi/linux/io_uring.h | 6 +++++- 2 files changed, 31 insertions(+), 2 deletions(-) diff --git a/fs/io_uring.c b/fs/io_uring.c index 1f2263a78c8e..a80f4c98ea86 100644 --- a/fs/io_uring.c +++ b/fs/io_uring.c @@ -1060,6 +1060,10 @@ static const struct io_op_def io_op_defs[] = { .needs_file = 1, .offsets = 1, }, + [IORING_OP_URING_CMD_FIXED] = { + .needs_file = 1, + .offsets = 1, + }, }; static bool io_disarm_next(struct io_kiocb *req); @@ -3602,7 +3606,12 @@ static int io_uring_cmd_prep(struct io_kiocb *req, } cmd->op = READ_ONCE(csqe->op); - cmd->len = READ_ONCE(csqe->len); + if (req->opcode == IORING_OP_URING_CMD_FIXED) { + req->imu = NULL; + io_req_set_rsrc_node(req); + req->buf_index = READ_ONCE(csqe->buf_index); + } else + cmd->len = READ_ONCE(csqe->len); /* * The payload is the last 40 bytes of an io_uring_cmd_sqe, with the @@ -3617,6 +3626,20 @@ static int io_uring_cmd(struct io_kiocb *req, unsigned int issue_flags) struct file *file = req->file; int ret; + if (req->opcode == IORING_OP_URING_CMD_FIXED) { + u32 index, buf_index = req->buf_index; + struct io_ring_ctx *ctx = req->ctx; + struct io_mapped_ubuf *imu = req->imu; + + if (likely(!imu)) { + if (unlikely(buf_index >= ctx->nr_user_bufs)) + return -EFAULT; + index = array_index_nospec(buf_index, ctx->nr_user_bufs); + imu = READ_ONCE(ctx->user_bufs[index]); + req->imu = imu; + } + } + ret = file->f_op->uring_cmd(&req->uring_cmd, issue_flags); /* queued async, consumer will call io_uring_cmd_done() when complete */ if (ret == -EIOCBQUEUED) @@ -6031,6 +6054,7 @@ static int io_req_prep(struct io_kiocb *req, const struct io_uring_sqe *sqe) case IORING_OP_UNLINKAT: return io_unlinkat_prep(req, sqe); case IORING_OP_URING_CMD: + case IORING_OP_URING_CMD_FIXED: return io_uring_cmd_prep(req, sqe); } @@ -6322,6 +6346,7 @@ static int io_issue_sqe(struct io_kiocb *req, unsigned int issue_flags) ret = io_unlinkat(req, issue_flags); break; case IORING_OP_URING_CMD: + case IORING_OP_URING_CMD_FIXED: ret = io_uring_cmd(req, issue_flags); break; default: diff --git a/include/uapi/linux/io_uring.h b/include/uapi/linux/io_uring.h index 92565e17bfd9..1a10ebd4ca0a 100644 --- a/include/uapi/linux/io_uring.h +++ b/include/uapi/linux/io_uring.h @@ -75,7 +75,10 @@ struct io_uring_cmd_sqe { __u64 user_data; __u16 op; __u16 personality; - __u32 len; + union { + __u32 len; + __u16 buf_index; + }; __u64 pdu[5]; }; @@ -154,6 +157,7 @@ enum { IORING_OP_RENAMEAT, IORING_OP_UNLINKAT, IORING_OP_URING_CMD, + IORING_OP_URING_CMD_FIXED, /* this goes last, obviously */ IORING_OP_LAST, -- 2.25.1 _______________________________________________ Linux-nvme mailing list Linux-nvme@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-nvme
next prev parent reply other threads:[~2021-08-05 13:16 UTC|newest] Thread overview: 38+ messages / expand[flat|nested] mbox.gz Atom feed top [not found] <CGME20210805125910epcas5p1100e7093dd2b1ac5bbb751331e2ded23@epcas5p1.samsung.com> 2021-08-05 12:55 ` [RFC PATCH 0/6] Fixed-buffers io_uring passthrough over nvme-char Kanchan Joshi 2021-08-05 12:55 ` Kanchan Joshi [not found] ` <CGME20210805125917epcas5p4f75c9423a7b886dc79500901cc8f55ab@epcas5p4.samsung.com> 2021-08-05 12:55 ` [RFC PATCH 1/6] io_uring: add infra for uring_cmd completion in submitter-task Kanchan Joshi 2021-08-05 12:55 ` Kanchan Joshi [not found] ` <CGME20210805125923epcas5p10e6c1b95475440be68f58244d5a3cb9a@epcas5p1.samsung.com> 2021-08-05 12:55 ` [RFC PATCH 2/6] nvme: wire-up support for async-passthru on char-device Kanchan Joshi 2021-08-05 12:55 ` Kanchan Joshi 2021-09-07 7:46 ` Christoph Hellwig 2021-09-07 7:46 ` Christoph Hellwig 2021-09-07 16:20 ` Kanchan Joshi 2021-09-07 16:20 ` Kanchan Joshi 2021-09-08 6:15 ` Christoph Hellwig 2021-09-08 6:15 ` Christoph Hellwig 2021-09-22 7:19 ` Kanchan Joshi 2021-09-22 7:19 ` Kanchan Joshi [not found] ` <CGME20210805125927epcas5p28f3413fe3d0a2baed37a05453df0d482@epcas5p2.samsung.com> 2021-08-05 12:55 ` [RFC PATCH 3/6] io_uring: mark iopoll not supported for uring-cmd Kanchan Joshi 2021-08-05 12:55 ` Kanchan Joshi [not found] ` <CGME20210805125931epcas5p259fec172085ea34fdbf5a1c1f8da5e90@epcas5p2.samsung.com> 2021-08-05 12:55 ` [RFC PATCH 4/6] io_uring: add helper for fixed-buffer uring-cmd Kanchan Joshi 2021-08-05 12:55 ` Kanchan Joshi 2021-09-07 7:47 ` Christoph Hellwig 2021-09-07 7:47 ` Christoph Hellwig [not found] ` <CGME20210805125934epcas5p4ff88e95d558ad9f65d77a888a4211b18@epcas5p4.samsung.com> 2021-08-05 12:55 ` Kanchan Joshi [this message] 2021-08-05 12:55 ` [RFC PATCH 5/6] io_uring: add support for uring_cmd with fixed-buffer Kanchan Joshi 2021-09-07 7:48 ` Christoph Hellwig 2021-09-07 7:48 ` Christoph Hellwig 2021-09-07 16:29 ` Kanchan Joshi 2021-09-07 16:29 ` Kanchan Joshi [not found] ` <CGME20210805125937epcas5p15667b460e28d87bd40400f69005aafe3@epcas5p1.samsung.com> 2021-08-05 12:55 ` [RFC PATCH 6/6] nvme: enable passthrough " Kanchan Joshi 2021-08-05 12:55 ` Kanchan Joshi 2021-09-07 7:50 ` Christoph Hellwig 2021-09-07 7:50 ` Christoph Hellwig 2021-09-07 16:47 ` Kanchan Joshi 2021-09-07 16:47 ` Kanchan Joshi 2021-09-08 6:16 ` Christoph Hellwig 2021-09-08 6:16 ` Christoph Hellwig 2021-09-07 7:10 ` [RFC PATCH 0/6] Fixed-buffers io_uring passthrough over nvme-char Christoph Hellwig 2021-09-07 7:10 ` Christoph Hellwig 2021-09-07 12:38 ` Jens Axboe 2021-09-07 12:38 ` Jens Axboe
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=20210805125539.66958-6-joshi.k@samsung.com \ --to=joshi.k@samsung.com \ --cc=anuj20.g@samsung.com \ --cc=axboe@kernel.dk \ --cc=hare@suse.de \ --cc=hch@lst.de \ --cc=io-uring@vger.kernel.org \ --cc=javier.gonz@samsung.com \ --cc=kbusch@kernel.org \ --cc=linux-nvme@lists.infradead.org \ /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: linkBe 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.