summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJens Axboe <axboe@kernel.dk>2020-01-26 10:17:12 -0700
committerJens Axboe <axboe@kernel.dk>2020-01-26 10:17:12 -0700
commitebe10026210f9ea740b9a050ee84a166690fddde (patch)
tree175b189cae209e729e2c5670c40207b494c636bc
parent73e08e711d9c1d79fae01daed4b0e1fee5f8a275 (diff)
downloadlinux-ebe10026210f9ea740b9a050ee84a166690fddde.tar.gz
linux-ebe10026210f9ea740b9a050ee84a166690fddde.tar.bz2
linux-ebe10026210f9ea740b9a050ee84a166690fddde.zip
io_uring: don't cancel all work on process exit
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>
-rw-r--r--fs/io_uring.c4
1 files changed, 0 insertions, 4 deletions
diff --git a/fs/io_uring.c b/fs/io_uring.c
index e5b502091804..e54556b0fcc6 100644
--- a/fs/io_uring.c
+++ b/fs/io_uring.c
@@ -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;
}