io_uring: refactor io_req_task_complete()
authorPavel Begunkov <asml.silence@gmail.com>
Thu, 16 Jun 2022 09:21:59 +0000 (10:21 +0100)
committerJens Axboe <axboe@kernel.dk>
Mon, 25 Jul 2022 00:39:13 +0000 (18:39 -0600)
Clean up io_req_task_complete() and deduplicate io_put_kbuf() calls.

Signed-off-by: Pavel Begunkov <asml.silence@gmail.com>
Link: https://lore.kernel.org/r/ae3148ac7eb5cce3e06895cde306e9e959d6f6ae.1655371007.git.asml.silence@gmail.com
Reviewed-by: Hao Xu <howeyxu@tencent.com>
Signed-off-by: Jens Axboe <axboe@kernel.dk>
io_uring/io_uring.c

index 541c109a9273bfc56122defd6561d870c6ffcea9..957a5bc1b528c9ab27e32ddfc67d9df6c0d42283 100644 (file)
@@ -1306,15 +1306,19 @@ static int io_iopoll_check(struct io_ring_ctx *ctx, long min)
 
        return ret;
 }
-inline void io_req_task_complete(struct io_kiocb *req, bool *locked)
+
+void io_req_task_complete(struct io_kiocb *req, bool *locked)
 {
-       if (*locked) {
-               req->cqe.flags |= io_put_kbuf(req, 0);
+       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);
+       }
+
+       if (*locked)
                io_req_add_compl_list(req);
-       } else {
-               req->cqe.flags |= io_put_kbuf(req, IO_URING_F_UNLOCKED);
+       else
                io_req_complete_post(req);
-       }
 }
 
 /*