Commit 26ec15e4 authored by Jens Axboe's avatar Jens Axboe
Browse files

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: 35c8711c ("io_uring/kbuf: add helpers for getting/peeking multiple buffers")
Reported-by: default avatarChristian Mazakas <christian.mazakas@gmail.com>
Signed-off-by: default avatarJens Axboe <axboe@kernel.dk>
parent c538f400
Loading
Loading
Loading
Loading
+4 −1
Original line number Diff line number Diff line
@@ -270,9 +270,12 @@ static int io_ring_buffers_peek(struct io_kiocb *req, struct buf_sel_arg *arg,
		/* 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);
		iov->iov_len = len;