io_uring: remove useless is_dying check on quiesce
authorPavel Begunkov <asml.silence@gmail.com>
Thu, 1 Apr 2021 14:43:48 +0000 (15:43 +0100)
committerJens Axboe <axboe@kernel.dk>
Mon, 12 Apr 2021 01:30:34 +0000 (19:30 -0600)
rsrc_data refs should always be valid for potential submitters,
io_rsrc_ref_quiesce() restores it before unlocking, so
percpu_ref_is_dying() check in io_sqe_files_unregister() does nothing
and misleading. Concurrent quiesce is prevented with
struct io_rsrc_data::quiesce.

Signed-off-by: Pavel Begunkov <asml.silence@gmail.com>
Link: https://lore.kernel.org/r/bf97055e1748ee3a382e66daf384a469eb90b931.1617287883.git.asml.silence@gmail.com
Signed-off-by: Jens Axboe <axboe@kernel.dk>
fs/io_uring.c

index 59e6661..373fe2b 100644 (file)
@@ -7135,6 +7135,7 @@ static int io_rsrc_ref_quiesce(struct io_rsrc_data *data, struct io_ring_ctx *ct
 {
        int ret;
 
+       /* As we may drop ->uring_lock, other task may have started quiesce */
        if (data->quiesce)
                return -ENXIO;
 
@@ -7197,12 +7198,7 @@ static int io_sqe_files_unregister(struct io_ring_ctx *ctx)
        unsigned nr_tables, i;
        int ret;
 
-       /*
-        * percpu_ref_is_dying() is to stop parallel files unregister
-        * Since we possibly drop uring lock later in this function to
-        * run task work.
-        */
-       if (!data || percpu_ref_is_dying(&data->refs))
+       if (!data)
                return -ENXIO;
        ret = io_rsrc_ref_quiesce(data, ctx);
        if (ret)