diff options
author | Pavel Begunkov <asml.silence@gmail.com> | 2023-01-16 17:48:57 +0100 |
---|---|---|
committer | Jens Axboe <axboe@kernel.dk> | 2023-01-29 23:17:41 +0100 |
commit | b0b7a7d24b66109a940d09d8d2dcf513e4eaf3a1 (patch) | |
tree | f8c14e44ea4cc08f7544d965492040ae9b0ba2a1 /io_uring | |
parent | io_uring: make io_sqpoll_wait_sq return void (diff) | |
download | linux-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.c | 5 |
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; } |