mirror of
https://gitee.com/bianbu-linux/linux-6.6
synced 2025-04-24 14:07:52 -04:00
io_uring: do not recycle buffer in READV
READV cannot recycle buffers as it would lose some of the data required to
reimport that buffer.
Reported-by: Ammar Faizi <ammarfaizi2@gnuweeb.org>
Fixes: b66e65f414
("io_uring: never call io_buffer_select() for a buffer re-select")
Signed-off-by: Dylan Yudaken <dylany@fb.com>
Link: https://lore.kernel.org/r/20220721131325.624788-1-dylany@fb.com
Signed-off-by: Jens Axboe <axboe@kernel.dk>
This commit is contained in:
parent
ec8516f3b7
commit
934447a603
1 changed files with 8 additions and 0 deletions
|
@ -1737,6 +1737,14 @@ static void io_kbuf_recycle(struct io_kiocb *req, unsigned issue_flags)
|
||||||
(req->flags & REQ_F_PARTIAL_IO))
|
(req->flags & REQ_F_PARTIAL_IO))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* READV uses fields in `struct io_rw` (len/addr) to stash the selected
|
||||||
|
* buffer data. However if that buffer is recycled the original request
|
||||||
|
* data stored in addr is lost. Therefore forbid recycling for now.
|
||||||
|
*/
|
||||||
|
if (req->opcode == IORING_OP_READV)
|
||||||
|
return;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* We don't need to recycle for REQ_F_BUFFER_RING, we can just clear
|
* We don't need to recycle for REQ_F_BUFFER_RING, we can just clear
|
||||||
* the flag and hence ensure that bl->head doesn't get incremented.
|
* the flag and hence ensure that bl->head doesn't get incremented.
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue