All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH stable-6.1 0/3] provided buffer recycling fixes
@ 2025-02-10 17:27 Pavel Begunkov
  2025-02-10 17:27 ` [PATCH stable-6.1 1/3] io_uring: fix multishots with selected buffers Pavel Begunkov
                   ` (2 more replies)
  0 siblings, 3 replies; 4+ messages in thread
From: Pavel Begunkov @ 2025-02-10 17:27 UTC (permalink / raw)
  To: stable
  Cc: Muhammad Ramdhan, Bing-Jhong Billy Jheng, Jacob Soo, Jens Axboe,
	Pavel Begunkov

Fixes for the provided buffers for not allowing kbufs to cross a single
execution section. Upstream had most of it already fixed by chance,
which is why all 3 patches refer to a single upstream commit.

Pavel Begunkov (3):
  io_uring: fix multishots with selected buffers
  io_uring: fix io_req_prep_async with provided buffers
  io_uring/rw: commit provided buffer state on async

 io_uring/io_uring.c |  5 ++++-
 io_uring/poll.c     |  2 ++
 io_uring/rw.c       | 10 ++++++++++
 3 files changed, 16 insertions(+), 1 deletion(-)

-- 
2.48.1


^ permalink raw reply	[flat|nested] 4+ messages in thread

* [PATCH stable-6.1 1/3] io_uring: fix multishots with selected buffers
  2025-02-10 17:27 [PATCH stable-6.1 0/3] provided buffer recycling fixes Pavel Begunkov
@ 2025-02-10 17:27 ` Pavel Begunkov
  2025-02-10 17:27 ` [PATCH stable-6.1 2/3] io_uring: fix io_req_prep_async with provided buffers Pavel Begunkov
  2025-02-10 17:27 ` [PATCH stable-6.1 3/3] io_uring/rw: commit provided buffer state on async Pavel Begunkov
  2 siblings, 0 replies; 4+ messages in thread
From: Pavel Begunkov @ 2025-02-10 17:27 UTC (permalink / raw)
  To: stable
  Cc: Muhammad Ramdhan, Bing-Jhong Billy Jheng, Jacob Soo, Jens Axboe,
	Pavel Begunkov

[ upstream commit d63b0e8a628e62ca85a0f7915230186bb92f8bb4 ]

We do io_kbuf_recycle() when arming a poll but every iteration of a
multishot can grab more buffers, which is why we need to flush the kbuf
ring state before continuing with waiting.

Cc: stable@vger.kernel.org
Fixes: b3fdea6ecb55c ("io_uring: multishot recv")
Reported-by: Muhammad Ramdhan <ramdhan@starlabs.sg>
Reported-by: Bing-Jhong Billy Jheng <billy@starlabs.sg>
Reported-by: Jacob Soo <jacob.soo@starlabs.sg>
Signed-off-by: Pavel Begunkov <asml.silence@gmail.com>
Link: https://lore.kernel.org/r/1bfc9990fe435f1fc6152ca9efeba5eb3e68339c.1738025570.git.asml.silence@gmail.com
Signed-off-by: Jens Axboe <axboe@kernel.dk>
---
 io_uring/poll.c | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/io_uring/poll.c b/io_uring/poll.c
index a4084acaff91..ab27a627fd4c 100644
--- a/io_uring/poll.c
+++ b/io_uring/poll.c
@@ -305,6 +305,8 @@ static int io_poll_check_events(struct io_kiocb *req, bool *locked)
 			}
 		} else {
 			int ret = io_poll_issue(req, locked);
+			io_kbuf_recycle(req, 0);
+
 			if (ret == IOU_STOP_MULTISHOT)
 				return IOU_POLL_REMOVE_POLL_USE_RES;
 			if (ret < 0)
-- 
2.48.1


^ permalink raw reply related	[flat|nested] 4+ messages in thread

* [PATCH stable-6.1 2/3] io_uring: fix io_req_prep_async with provided buffers
  2025-02-10 17:27 [PATCH stable-6.1 0/3] provided buffer recycling fixes Pavel Begunkov
  2025-02-10 17:27 ` [PATCH stable-6.1 1/3] io_uring: fix multishots with selected buffers Pavel Begunkov
@ 2025-02-10 17:27 ` Pavel Begunkov
  2025-02-10 17:27 ` [PATCH stable-6.1 3/3] io_uring/rw: commit provided buffer state on async Pavel Begunkov
  2 siblings, 0 replies; 4+ messages in thread
From: Pavel Begunkov @ 2025-02-10 17:27 UTC (permalink / raw)
  To: stable
  Cc: Muhammad Ramdhan, Bing-Jhong Billy Jheng, Jacob Soo, Jens Axboe,
	Pavel Begunkov

[ upstream commit d63b0e8a628e62ca85a0f7915230186bb92f8bb4 ]

io_req_prep_async() can import provided buffers, commit the ring state
by giving up on that before, it'll be reimported later if needed.

Reported-by: Muhammad Ramdhan <ramdhan@starlabs.sg>
Reported-by: Bing-Jhong Billy Jheng <billy@starlabs.sg>
Reported-by: Jacob Soo <jacob.soo@starlabs.sg>
Fixes: c7fb19428d67d ("io_uring: add support for ring mapped supplied buffers")
Signed-off-by: Pavel Begunkov <asml.silence@gmail.com>
---
 io_uring/io_uring.c | 5 ++++-
 1 file changed, 4 insertions(+), 1 deletion(-)

diff --git a/io_uring/io_uring.c b/io_uring/io_uring.c
index 64502323be5e..33597284e1cb 100644
--- a/io_uring/io_uring.c
+++ b/io_uring/io_uring.c
@@ -1624,6 +1624,7 @@ bool io_alloc_async_data(struct io_kiocb *req)
 int io_req_prep_async(struct io_kiocb *req)
 {
 	const struct io_op_def *def = &io_op_defs[req->opcode];
+	int ret;
 
 	/* assign early for deferred execution for non-fixed file */
 	if (def->needs_file && !(req->flags & REQ_F_FIXED_FILE) && !req->file)
@@ -1636,7 +1637,9 @@ int io_req_prep_async(struct io_kiocb *req)
 		if (io_alloc_async_data(req))
 			return -EAGAIN;
 	}
-	return def->prep_async(req);
+	ret = def->prep_async(req);
+	io_kbuf_recycle(req, 0);
+	return ret;
 }
 
 static u32 io_get_sequence(struct io_kiocb *req)
-- 
2.48.1


^ permalink raw reply related	[flat|nested] 4+ messages in thread

* [PATCH stable-6.1 3/3] io_uring/rw: commit provided buffer state on async
  2025-02-10 17:27 [PATCH stable-6.1 0/3] provided buffer recycling fixes Pavel Begunkov
  2025-02-10 17:27 ` [PATCH stable-6.1 1/3] io_uring: fix multishots with selected buffers Pavel Begunkov
  2025-02-10 17:27 ` [PATCH stable-6.1 2/3] io_uring: fix io_req_prep_async with provided buffers Pavel Begunkov
@ 2025-02-10 17:27 ` Pavel Begunkov
  2 siblings, 0 replies; 4+ messages in thread
From: Pavel Begunkov @ 2025-02-10 17:27 UTC (permalink / raw)
  To: stable
  Cc: Muhammad Ramdhan, Bing-Jhong Billy Jheng, Jacob Soo, Jens Axboe,
	Pavel Begunkov

[ upstream commit d63b0e8a628e62ca85a0f7915230186bb92f8bb4 ]

When we get -EIOCBQUEUED, we need to ensure that the buffer is consumed
from the provided buffer ring, which can be done with io_kbuf_recycle()
+ REQ_F_PARTIAL_IO.

Reported-by: Muhammad Ramdhan <ramdhan@starlabs.sg>
Reported-by: Bing-Jhong Billy Jheng <billy@starlabs.sg>
Reported-by: Jacob Soo <jacob.soo@starlabs.sg>
Fixes: c7fb19428d67d ("io_uring: add support for ring mapped supplied buffers")
Signed-off-by: Pavel Begunkov <asml.silence@gmail.com>
---
 io_uring/rw.c | 10 ++++++++++
 1 file changed, 10 insertions(+)

diff --git a/io_uring/rw.c b/io_uring/rw.c
index 692663bd864f..b75f62dccce6 100644
--- a/io_uring/rw.c
+++ b/io_uring/rw.c
@@ -772,6 +772,8 @@ static int __io_read(struct io_kiocb *req, unsigned int issue_flags)
 			goto done;
 		ret = 0;
 	} else if (ret == -EIOCBQUEUED) {
+		req->flags |= REQ_F_PARTIAL_IO;
+		io_kbuf_recycle(req, issue_flags);
 		if (iovec)
 			kfree(iovec);
 		return IOU_ISSUE_SKIP_COMPLETE;
@@ -795,6 +797,9 @@ static int __io_read(struct io_kiocb *req, unsigned int issue_flags)
 		goto done;
 	}
 
+	req->flags |= REQ_F_PARTIAL_IO;
+	io_kbuf_recycle(req, issue_flags);
+
 	io = req->async_data;
 	s = &io->s;
 	/*
@@ -935,6 +940,11 @@ int io_write(struct io_kiocb *req, unsigned int issue_flags)
 	else
 		ret2 = -EINVAL;
 
+	if (ret2 == -EIOCBQUEUED) {
+		req->flags |= REQ_F_PARTIAL_IO;
+		io_kbuf_recycle(req, issue_flags);
+	}
+
 	if (req->flags & REQ_F_REISSUE) {
 		req->flags &= ~REQ_F_REISSUE;
 		ret2 = -EAGAIN;
-- 
2.48.1


^ permalink raw reply related	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2025-02-10 17:27 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-02-10 17:27 [PATCH stable-6.1 0/3] provided buffer recycling fixes Pavel Begunkov
2025-02-10 17:27 ` [PATCH stable-6.1 1/3] io_uring: fix multishots with selected buffers Pavel Begunkov
2025-02-10 17:27 ` [PATCH stable-6.1 2/3] io_uring: fix io_req_prep_async with provided buffers Pavel Begunkov
2025-02-10 17:27 ` [PATCH stable-6.1 3/3] io_uring/rw: commit provided buffer state on async Pavel Begunkov

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.