summaryrefslogtreecommitdiff
path: root/io_uring/kbuf.h
diff options
context:
space:
mode:
authorTakashi Iwai <tiwai@suse.de>2022-09-22 13:54:20 +0200
committerTakashi Iwai <tiwai@suse.de>2022-09-22 13:54:20 +0200
commitaf45a0d32df9c8f5abbbc7401d70ffa296c8cef6 (patch)
treef162ece8fa7d94374d15801d614849db649282ac /io_uring/kbuf.h
parentb5eee17cf7ddaf7b29a031b2c48277038e7a171a (diff)
parentc35fbea48659ec99a4f532c9ee9e8692405afdd0 (diff)
Merge branch 'for-linus' into for-next
Diffstat (limited to 'io_uring/kbuf.h')
-rw-r--r--io_uring/kbuf.h8
1 files changed, 6 insertions, 2 deletions
diff --git a/io_uring/kbuf.h b/io_uring/kbuf.h
index d6af208d109f..746fbf31a703 100644
--- a/io_uring/kbuf.h
+++ b/io_uring/kbuf.h
@@ -91,9 +91,13 @@ static inline void io_kbuf_recycle(struct io_kiocb *req, unsigned issue_flags)
* 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)
+ if (req->opcode == IORING_OP_READV) {
+ if ((req->flags & REQ_F_BUFFER_RING) && req->buf_list) {
+ req->buf_list->head++;
+ req->buf_list = NULL;
+ }
return;
-
+ }
if (req->flags & REQ_F_BUFFER_SELECTED)
io_kbuf_recycle_legacy(req, issue_flags);
if (req->flags & REQ_F_BUFFER_RING)