From eef81fcaa61e1bc6b7735be65f41bbf1a8efd133 Mon Sep 17 00:00:00 2001 From: Pavel Begunkov Date: Thu, 13 Apr 2023 15:28:07 +0100 Subject: io_uring/rsrc: refactor io_rsrc_ref_quiesce Refactor io_rsrc_ref_quiesce() by moving the first mutex_unlock(), so we don't have to have a second mutex_unlock() further in the loop. It prepares us to the next patch. Signed-off-by: Pavel Begunkov Link: https://lore.kernel.org/r/65bc876271fb16bf550a53a4c76c91aacd94e52e.1681395792.git.asml.silence@gmail.com Signed-off-by: Jens Axboe --- io_uring/rsrc.c | 18 +++++------------- 1 file changed, 5 insertions(+), 13 deletions(-) (limited to 'io_uring/rsrc.c') diff --git a/io_uring/rsrc.c b/io_uring/rsrc.c index 5fc9d10743e0..d7e7528f7159 100644 --- a/io_uring/rsrc.c +++ b/io_uring/rsrc.c @@ -272,8 +272,8 @@ __cold static int io_rsrc_ref_quiesce(struct io_rsrc_data *data, return 0; data->quiesce = true; - mutex_unlock(&ctx->uring_lock); do { + mutex_unlock(&ctx->uring_lock); ret = io_run_task_work_sig(ctx); if (ret < 0) { mutex_lock(&ctx->uring_lock); @@ -285,18 +285,10 @@ __cold static int io_rsrc_ref_quiesce(struct io_rsrc_data *data, } break; } - ret = wait_for_completion_interruptible(&data->done); - if (!ret) { - mutex_lock(&ctx->uring_lock); - if (!data->refs) - break; - /* - * it has been revived by another thread while - * we were unlocked - */ - mutex_unlock(&ctx->uring_lock); - } - } while (1); + wait_for_completion_interruptible(&data->done); + mutex_lock(&ctx->uring_lock); + ret = 0; + } while (data->refs); data->quiesce = false; return ret; -- cgit v1.2.3