Commit ed6930c9 authored by Jens Axboe's avatar Jens Axboe
Browse files

io_uring: fix break condition for __io_uring_register() waiting



Colin reports that there's unreachable code, since we only ever break
if ret == 0. This is correct, and is due to a reversed logic condition
in when to break or not.

Break out of the loop if we don't process any task work, in that case
we do want to return -EINTR.

Fixes: af9c1a44 ("io_uring: process task work in io_uring_register()")
Reported-by: default avatarColin Ian King <colin.king@canonical.com>
Signed-off-by: default avatarJens Axboe <axboe@kernel.dk>
parent ca6484cd
Loading
Loading
Loading
Loading
+3 −3
Original line number Diff line number Diff line
@@ -9511,15 +9511,15 @@ static int __io_uring_register(struct io_ring_ctx *ctx, unsigned opcode,
			ret = wait_for_completion_interruptible(&ctx->ref_comp);
			if (!ret)
				break;
			if (io_run_task_work_sig() > 0)
				continue;
			ret = io_run_task_work_sig();
			if (ret < 0)
				break;
		} while (1);

		mutex_lock(&ctx->uring_lock);

		if (ret) {
			percpu_ref_resurrect(&ctx->refs);
			ret = -EINTR;
			goto out_quiesce;
		}
	}