diff --git a/fs/io_uring.c b/fs/io_uring.c index 0885f04195b22..d465e99971574 100644 --- a/fs/io_uring.c +++ b/fs/io_uring.c @@ -1899,7 +1899,7 @@ static void tctx_task_work(struct callback_head *cb) clear_bit(0, &tctx->task_state); - while (!wq_list_empty(&tctx->task_list)) { + while (true) { struct io_ring_ctx *ctx = NULL; struct io_wq_work_list list; struct io_wq_work_node *node; @@ -1909,6 +1909,9 @@ static void tctx_task_work(struct callback_head *cb) INIT_WQ_LIST(&tctx->task_list); spin_unlock_irq(&tctx->task_lock); + if (wq_list_empty(&list)) + break; + node = list.first; while (node) { struct io_wq_work_node *next = node->next;