]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
io_uring: avoid io-wq -EAGAIN looping for !IOPOLL
authorPavel Begunkov <asml.silence@gmail.com>
Fri, 13 May 2022 10:24:56 +0000 (11:24 +0100)
committerJens Axboe <axboe@kernel.dk>
Fri, 13 May 2022 12:50:42 +0000 (06:50 -0600)
If an opcode handler semi-reliably returns -EAGAIN, io_wq_submit_work()
might continue busily hammer the same handler over and over again, which
is not ideal. The -EAGAIN handling in question was put there only for
IOPOLL, so restrict it to IOPOLL mode only where there is no other
recourse than to retry as we cannot wait.

Fixes: def596e9557c9 ("io_uring: support for IO polling")
Signed-off-by: Pavel Begunkov <asml.silence@gmail.com>
Link: https://lore.kernel.org/r/f168b4f24181942f3614dd8ff648221736f572e6.1652433740.git.asml.silence@gmail.com
Signed-off-by: Jens Axboe <axboe@kernel.dk>
fs/io_uring.c

index 362189819898821fc76ce6e01bcfbead0591e2ce..f5f38329c823205cf69635d6f2a218241fa13ac2 100644 (file)
@@ -7573,6 +7573,8 @@ fail:
                 * wait for request slots on the block side.
                 */
                if (!needs_poll) {
+                       if (!(req->ctx->flags & IORING_SETUP_IOPOLL))
+                               break;
                        cond_resched();
                        continue;
                }