34 lines
1.2 KiB
Diff
34 lines
1.2 KiB
Diff
From 862a81c79f0bea8ede0352b637b44716f02f71b9 Mon Sep 17 00:00:00 2001
|
|
From: Jens Axboe <axboe@kernel.dk>
|
|
Date: Fri, 13 Jun 2025 11:01:49 -0600
|
|
Subject: io_uring/kbuf: don't truncate end buffer for multiple buffer peeks
|
|
|
|
If peeking a bunch of buffers, normally io_ring_buffers_peek() will
|
|
truncate the end buffer. This isn't optimal as presumably more data will
|
|
be arriving later, and hence it's better to stop with the last full
|
|
buffer rather than truncate the end buffer.
|
|
|
|
Cc: stable@vger.kernel.org
|
|
Fixes: 35c8711c8fc4 ("io_uring/kbuf: add helpers for getting/peeking multiple buffers")
|
|
Reported-by: Christian Mazakas <christian.mazakas@gmail.com>
|
|
Signed-off-by: Jens Axboe <axboe@kernel.dk>
|
|
---
|
|
io_uring/kbuf.c | 5 ++++-
|
|
1 file changed, 4 insertions(+), 1 deletion(-)
|
|
|
|
--- a/io_uring/kbuf.c
|
|
+++ b/io_uring/kbuf.c
|
|
@@ -270,8 +270,11 @@ static int io_ring_buffers_peek(struct i
|
|
/* truncate end piece, if needed, for non partial buffers */
|
|
if (len > arg->max_len) {
|
|
len = arg->max_len;
|
|
- if (!(bl->flags & IOBL_INC))
|
|
+ if (!(bl->flags & IOBL_INC)) {
|
|
+ if (iov != arg->iovs)
|
|
+ break;
|
|
buf->len = len;
|
|
+ }
|
|
}
|
|
|
|
iov->iov_base = u64_to_user_ptr(buf->addr);
|