diff options
author | Jens Axboe <axboe@kernel.dk> | 2025-06-26 12:17:48 -0600 |
---|---|---|
committer | Jens Axboe <axboe@kernel.dk> | 2025-06-26 12:17:48 -0600 |
commit | 178b8ff66ff827c41b4fa105e9aabb99a0b5c537 (patch) | |
tree | 829ad60f69691824b13aaba88c84e45314add471 /io_uring/kbuf.c | |
parent | 9a709b7e98e6fa51600b5f2d24c5068efa6d39de (diff) |
io_uring/kbuf: flag partial buffer mappings
A previous commit aborted mapping more for a non-incremental ring for
bundle peeking, but depending on where in the process this peeking
happened, it would not necessarily prevent a retry by the user. That can
create gaps in the received/read data.
Add struct buf_sel_arg->partial_map, which can pass this information
back. The networking side can then map that to internal state and use it
to gate retry as well.
Since this necessitates a new flag, change io_sr_msg->retry to a
retry_flags member, and store both the retry and partial map condition
in there.
Cc: stable@vger.kernel.org
Fixes: 26ec15e4b0c1 ("io_uring/kbuf: don't truncate end buffer for multiple buffer peeks")
Signed-off-by: Jens Axboe <axboe@kernel.dk>
Diffstat (limited to 'io_uring/kbuf.c')
-rw-r--r-- | io_uring/kbuf.c | 1 |
1 files changed, 1 insertions, 0 deletions
diff --git a/io_uring/kbuf.c b/io_uring/kbuf.c index ce95e3af44a9..f2d2cc319faa 100644 --- a/io_uring/kbuf.c +++ b/io_uring/kbuf.c @@ -271,6 +271,7 @@ static int io_ring_buffers_peek(struct io_kiocb *req, struct buf_sel_arg *arg, if (len > arg->max_len) { len = arg->max_len; if (!(bl->flags & IOBL_INC)) { + arg->partial_map = 1; if (iov != arg->iovs) break; buf->len = len; |