io_uring/rsrc: refactor io_rsrc_ref_quiesce
authorPavel Begunkov <asml.silence@gmail.com>
Thu, 13 Apr 2023 14:28:07 +0000 (15:28 +0100)
committerJens Axboe <axboe@kernel.dk>
Sat, 15 Apr 2023 20:44:57 +0000 (14:44 -0600)
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 <asml.silence@gmail.com>
Link: https://lore.kernel.org/r/65bc876271fb16bf550a53a4c76c91aacd94e52e.1681395792.git.asml.silence@gmail.com
Signed-off-by: Jens Axboe <axboe@kernel.dk>
io_uring/rsrc.c

index 5fc9d10..d7e7528 100644 (file)
@@ -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;