io_uring: always progress task_work on task cancel
authorPavel Begunkov <asml.silence@gmail.com>
Sun, 20 Dec 2020 13:21:43 +0000 (13:21 +0000)
committerJens Axboe <axboe@kernel.dk>
Sun, 20 Dec 2020 18:05:39 +0000 (11:05 -0700)
Might happen that __io_uring_cancel_task_requests() cancels nothing but
there are task_works pending. We need to always run them.

Signed-off-by: Pavel Begunkov <asml.silence@gmail.com>
Signed-off-by: Jens Axboe <axboe@kernel.dk>
fs/io_uring.c

index 48b9332..d0ab6b5 100644 (file)
@@ -8801,9 +8801,9 @@ static void __io_uring_cancel_task_requests(struct io_ring_ctx *ctx,
 
                ret |= io_poll_remove_all(ctx, task, NULL);
                ret |= io_kill_timeouts(ctx, task, NULL);
+               ret |= io_run_task_work();
                if (!ret)
                        break;
-               io_run_task_work();
                cond_resched();
        }
 }