]> git.baikalelectronics.ru Git - kernel.git/commitdiff
io_uring: don't cancel all work on process exit
authorJens Axboe <axboe@kernel.dk>
Sun, 26 Jan 2020 17:17:12 +0000 (10:17 -0700)
committerJens Axboe <axboe@kernel.dk>
Sun, 26 Jan 2020 17:17:12 +0000 (10:17 -0700)
If we're sharing the ring across forks, then one process exiting means
that we cancel ALL work and prevent future work. This is overly
restrictive. As long as we cancel the work associated with the files
from the current task, it's safe to let others persist. Normal fd close
on exit will still wait (and cancel) pending work.

Fixes: fcb323cc53e2 ("io_uring: io_uring: add support for async work inheriting files")
Reported-by: Andres Freund <andres@anarazel.de>
Signed-off-by: Jens Axboe <axboe@kernel.dk>
fs/io_uring.c

index e5b502091804de41273f10fb8111bb36d4c0e0d1..e54556b0fcc69755cb39d59c361ff0a855d33c3a 100644 (file)
@@ -5044,10 +5044,6 @@ static int io_uring_flush(struct file *file, void *data)
        struct io_ring_ctx *ctx = file->private_data;
 
        io_uring_cancel_files(ctx, data);
-       if (fatal_signal_pending(current) || (current->flags & PF_EXITING)) {
-               io_cqring_overflow_flush(ctx, true);
-               io_wq_cancel_all(ctx->io_wq);
-       }
        return 0;
 }