io_uring: prolong tctx_task_work() with flushing
io_submit_flush_completions() may enqueue linked requests for task_work execution, so don't leave tctx_task_work() right after the tw list is exhausted, but try to flush and then retry. Signed-off-by: Pavel Begunkov <asml.silence@gmail.com> Link: https://lore.kernel.org/r/0755d4c2c36301447c63bdd4146c10477cea4249.1630539342.git.asml.silence@gmail.com Signed-off-by: Jens Axboe <axboe@kernel.dk>
This commit is contained in:
parent
636378535a
commit
8d4ad41e3e
|
@ -2102,6 +2102,9 @@ static void tctx_task_work(struct callback_head *cb)
|
||||||
while (1) {
|
while (1) {
|
||||||
struct io_wq_work_node *node;
|
struct io_wq_work_node *node;
|
||||||
|
|
||||||
|
if (!tctx->task_list.first && locked && ctx->submit_state.compl_nr)
|
||||||
|
io_submit_flush_completions(ctx);
|
||||||
|
|
||||||
spin_lock_irq(&tctx->task_lock);
|
spin_lock_irq(&tctx->task_lock);
|
||||||
node = tctx->task_list.first;
|
node = tctx->task_list.first;
|
||||||
INIT_WQ_LIST(&tctx->task_list);
|
INIT_WQ_LIST(&tctx->task_list);
|
||||||
|
|
Loading…
Reference in New Issue