]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
io_uring/io-wq: fix incorrect io_wq_for_each_worker() termination logic
authorJens Axboe <axboe@kernel.dk>
Mon, 5 Jan 2026 14:42:48 +0000 (07:42 -0700)
committerJens Axboe <axboe@kernel.dk>
Mon, 5 Jan 2026 21:37:33 +0000 (14:37 -0700)
A previous commit added this helper, and had it terminate if false is
returned from the handler. However, that is completely opposite, it
should abort the loop if true is returned.

Fix this up by having io_wq_for_each_worker() keep iterating as long
as false is returned, and only abort if true is returned.

Cc: stable@vger.kernel.org
Fixes: 751eedc4b4b7 ("io_uring/io-wq: move worker lists to struct io_wq_acct")
Reported-by: Lewis Campbell <info@lewiscampbell.tech>
Reviewed-by: Gabriel Krisman Bertazi <krisman@suse.de>
Signed-off-by: Jens Axboe <axboe@kernel.dk>
io_uring/io-wq.c

index cd13d8aac3d26d8a27030a146fd675071d9e5be8..6c5ef629e59ada8dba9228c4df1fe91254b32f30 100644 (file)
@@ -952,11 +952,11 @@ static bool io_wq_for_each_worker(struct io_wq *wq,
                                  void *data)
 {
        for (int i = 0; i < IO_WQ_ACCT_NR; i++) {
-               if (!io_acct_for_each_worker(&wq->acct[i], func, data))
-                       return false;
+               if (io_acct_for_each_worker(&wq->acct[i], func, data))
+                       return true;
        }
 
-       return true;
+       return false;
 }
 
 static bool io_wq_worker_wake(struct io_worker *worker, void *data)