From: Ming Lei <[email protected]>
To: Jens Axboe <[email protected]>,
[email protected], [email protected]
Cc: [email protected],
Miklos Szeredi <[email protected]>,
ZiyangZhang <[email protected]>,
Xiaoguang Wang <[email protected]>,
Bernd Schubert <[email protected]>,
Pavel Begunkov <[email protected]>,
Stefan Hajnoczi <[email protected]>,
Dan Williams <[email protected]>,
Ming Lei <[email protected]>
Subject: [PATCH V5 04/16] io_uring: support OP_READ/OP_WRITE for fused secondary request
Date: Tue, 28 Mar 2023 23:09:46 +0800 [thread overview]
Message-ID: <[email protected]> (raw)
In-Reply-To: <[email protected]>
Start to allow fused secondary request to support OP_READ/OP_WRITE, and
the buffer can be retrieved from the primary request.
Once the secondary request is completed, the primary request buffer will
be returned back.
Signed-off-by: Ming Lei <[email protected]>
---
io_uring/opdef.c | 4 ++++
io_uring/rw.c | 21 +++++++++++++++++++++
2 files changed, 25 insertions(+)
diff --git a/io_uring/opdef.c b/io_uring/opdef.c
index 63b90e8e65f8..d81c9afd65ed 100644
--- a/io_uring/opdef.c
+++ b/io_uring/opdef.c
@@ -235,6 +235,8 @@ const struct io_issue_def io_issue_defs[] = {
.ioprio = 1,
.iopoll = 1,
.iopoll_queue = 1,
+ .fused_secondary = 1,
+ .buf_dir = WRITE,
.prep = io_prep_rw,
.issue = io_read,
},
@@ -248,6 +250,8 @@ const struct io_issue_def io_issue_defs[] = {
.ioprio = 1,
.iopoll = 1,
.iopoll_queue = 1,
+ .fused_secondary = 1,
+ .buf_dir = READ,
.prep = io_prep_rw,
.issue = io_write,
},
diff --git a/io_uring/rw.c b/io_uring/rw.c
index 5431caf1e331..d25eeee67c65 100644
--- a/io_uring/rw.c
+++ b/io_uring/rw.c
@@ -19,6 +19,7 @@
#include "kbuf.h"
#include "rsrc.h"
#include "rw.h"
+#include "fused_cmd.h"
struct io_rw {
/* NOTE: kiocb has the file as the first member, so don't do it here */
@@ -371,6 +372,18 @@ static struct iovec *__io_import_iovec(int ddir, struct io_kiocb *req,
size_t sqe_len;
ssize_t ret;
+ /*
+ * fused_secondary OP passes buffer offset from sqe->addr actually, since
+ * the fused cmd buf's mapped start address is zero.
+ */
+ if (req->flags & REQ_F_FUSED_SECONDARY) {
+ ret = io_import_buf_for_secondary(rw->addr, rw->len, ddir,
+ iter, req);
+ if (ret)
+ return ERR_PTR(ret);
+ return NULL;
+ }
+
if (opcode == IORING_OP_READ_FIXED || opcode == IORING_OP_WRITE_FIXED) {
ret = io_import_fixed(ddir, iter, req->imu, rw->addr, rw->len);
if (ret)
@@ -443,11 +456,19 @@ static inline loff_t *io_kiocb_ppos(struct kiocb *kiocb)
*/
static ssize_t loop_rw_iter(int ddir, struct io_rw *rw, struct iov_iter *iter)
{
+ struct io_kiocb *req = cmd_to_io_kiocb(rw);
struct kiocb *kiocb = &rw->kiocb;
struct file *file = kiocb->ki_filp;
ssize_t ret = 0;
loff_t *ppos;
+ /*
+ * Fused secondary req hasn't user buffer, so ->read/->write can't
+ * be supported
+ */
+ if (req->flags & REQ_F_FUSED_SECONDARY)
+ return -EOPNOTSUPP;
+
/*
* Don't support polled IO through this interface, and we can't
* support non-blocking either. For the latter, this just causes
--
2.39.2
next prev parent reply other threads:[~2023-03-28 15:20 UTC|newest]
Thread overview: 24+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-03-28 15:09 [PATCH V5 00/16] io_uring/ublk: add IORING_OP_FUSED_CMD Ming Lei
2023-03-28 15:09 ` [PATCH V5 01/16] io_uring: increase io_kiocb->flags into 64bit Ming Lei
2023-03-28 15:09 ` [PATCH V5 02/16] io_uring: add IORING_OP_FUSED_CMD Ming Lei
2023-03-28 17:33 ` kernel test robot
2023-03-28 15:09 ` [PATCH V5 03/16] io_uring: support normal SQE for fused command Ming Lei
2023-03-28 15:09 ` Ming Lei [this message]
2023-03-28 15:09 ` [PATCH V5 05/16] io_uring: support OP_SEND_ZC/OP_RECV for fused secondary request Ming Lei
2023-03-28 15:09 ` [PATCH V5 06/16] block: ublk_drv: add common exit handling Ming Lei
2023-03-28 15:09 ` [PATCH V5 07/16] block: ublk_drv: don't consider flush request in map/unmap io Ming Lei
2023-03-28 15:09 ` [PATCH V5 08/16] block: ublk_drv: add two helpers to clean up map/unmap request Ming Lei
2023-03-28 15:09 ` [PATCH V5 09/16] block: ublk_drv: clean up several helpers Ming Lei
2023-03-28 15:09 ` [PATCH V5 10/16] block: ublk_drv: cleanup 'struct ublk_map_data' Ming Lei
2023-03-28 15:09 ` [PATCH V5 11/16] block: ublk_drv: cleanup ublk_copy_user_pages Ming Lei
2023-03-28 15:09 ` [PATCH V5 12/16] block: ublk_drv: grab request reference when the request is handled by userspace Ming Lei
2023-03-28 15:09 ` [PATCH V5 13/16] block: ublk_drv: support to copy any part of request pages Ming Lei
2023-03-28 15:09 ` [PATCH V5 14/16] block: ublk_drv: add read()/write() support for ublk char device Ming Lei
2023-03-28 15:09 ` [PATCH V5 15/16] block: ublk_drv: don't check buffer in case of zero copy Ming Lei
2023-03-28 15:09 ` [PATCH V5 16/16] block: ublk_drv: apply io_uring FUSED_CMD for supporting " Ming Lei
2023-03-29 2:57 ` Ziyang Zhang
2023-03-29 9:00 ` Ming Lei
2023-03-29 10:01 ` Ziyang Zhang
2023-03-29 10:52 ` Ming Lei
2023-04-03 8:38 ` Ziyang Zhang
2023-04-03 9:22 ` 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 \
[email protected] \
[email protected] \
[email protected] \
[email protected] \
[email protected] \
[email protected] \
[email protected] \
[email protected] \
[email protected] \
[email protected] \
[email protected] \
[email protected] \
[email protected] \
/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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox