summaryrefslogtreecommitdiffstats
path: root/io_uring
diff options
context:
space:
mode:
authorPavel Begunkov <asml.silence@gmail.com>2023-01-16 17:48:57 +0100
committerJens Axboe <axboe@kernel.dk>2023-01-29 23:17:41 +0100
commitb0b7a7d24b66109a940d09d8d2dcf513e4eaf3a1 (patch)
treef8c14e44ea4cc08f7544d965492040ae9b0ba2a1 /io_uring
parentio_uring: make io_sqpoll_wait_sq return void (diff)
downloadlinux-b0b7a7d24b66109a940d09d8d2dcf513e4eaf3a1.tar.xz
linux-b0b7a7d24b66109a940d09d8d2dcf513e4eaf3a1.zip
io_uring: return back links tw run optimisation
io_submit_flush_completions() may queue new requests for tw execution, especially true for linked requests. Recheck the tw list for emptiness after flushing completions. Note that this doesn't really fix the commit referenced below, but it does reinstate an optimization that existed before that got merged. Fixes: f88262e60bb9 ("io_uring: lockless task list") Signed-off-by: Pavel Begunkov <asml.silence@gmail.com> Link: https://lore.kernel.org/r/6328acdbb5e60efc762b18003382de077e6e1367.1673887636.git.asml.silence@gmail.com Signed-off-by: Jens Axboe <axboe@kernel.dk>
Diffstat (limited to 'io_uring')
-rw-r--r--io_uring/io_uring.c5
1 files changed, 4 insertions, 1 deletions
diff --git a/io_uring/io_uring.c b/io_uring/io_uring.c
index 8fddc010ffe2..c47af3a3dacf 100644
--- a/io_uring/io_uring.c
+++ b/io_uring/io_uring.c
@@ -1344,8 +1344,11 @@ again:
if (!llist_empty(&ctx->work_llist))
goto again;
- if (*locked)
+ if (*locked) {
io_submit_flush_completions(ctx);
+ if (!llist_empty(&ctx->work_llist))
+ goto again;
+ }
trace_io_uring_local_work_run(ctx, ret, loops);
return ret;
}