diff options
author | Pavel Begunkov <asml.silence@gmail.com> | 2022-11-04 10:59:40 +0000 |
---|---|---|
committer | Jens Axboe <axboe@kernel.dk> | 2022-11-21 07:38:31 -0700 |
commit | 3671163beb633fbe3297b8e30369b640ce4bd690 (patch) | |
tree | efbc7d6fa739e8ba56443087b08437a60b54ba3a /io_uring/rw.c | |
parent | e307e6698165ca6508ed42c69cb1be76c8eb6a3c (diff) | |
download | linux-stable-3671163beb633fbe3297b8e30369b640ce4bd690.tar.gz linux-stable-3671163beb633fbe3297b8e30369b640ce4bd690.tar.bz2 linux-stable-3671163beb633fbe3297b8e30369b640ce4bd690.zip |
io_uring: move kbuf put out of generic tw complete
There are multiple users of io_req_task_complete() including zc
notifications, but only read requests use selected buffers. As we
already have an rw specific tw function, move io_put_kbuf() in there.
Signed-off-by: Pavel Begunkov <asml.silence@gmail.com>
Link: https://lore.kernel.org/r/94374c7649aaefc3a17808dc4701f25ccd457e25.1667557923.git.asml.silence@gmail.com
Signed-off-by: Jens Axboe <axboe@kernel.dk>
Diffstat (limited to 'io_uring/rw.c')
-rw-r--r-- | io_uring/rw.c | 6 |
1 files changed, 6 insertions, 0 deletions
diff --git a/io_uring/rw.c b/io_uring/rw.c index bb47cc4da713..1ce065709724 100644 --- a/io_uring/rw.c +++ b/io_uring/rw.c @@ -286,6 +286,12 @@ static inline int io_fixup_rw_res(struct io_kiocb *req, long res) static void io_req_rw_complete(struct io_kiocb *req, bool *locked) { io_req_io_end(req); + + if (req->flags & (REQ_F_BUFFER_SELECTED|REQ_F_BUFFER_RING)) { + unsigned issue_flags = *locked ? 0 : IO_URING_F_UNLOCKED; + + req->cqe.flags |= io_put_kbuf(req, issue_flags); + } io_req_task_complete(req, locked); } |