aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPavel Begunkov <asml.silence@gmail.com>2021-03-04 13:59:24 +0000
committerJens Axboe <axboe@kernel.dk>2021-03-04 15:44:50 -0700
commitb05a1bcd40184f12f2cd87db79e871aa8c17563f (patch)
tree6bf16f9b3f0d73084341fb55cf4c340f0aed73bc
parentio-wq: ensure all pending work is canceled on exit (diff)
downloadlinux-dev-b05a1bcd40184f12f2cd87db79e871aa8c17563f.tar.xz
linux-dev-b05a1bcd40184f12f2cd87db79e871aa8c17563f.zip
io_uring: cancel-match based on flags
Instead of going into request internals, like checking req->file->f_op, do match them based on REQ_F_INFLIGHT, it's set only when we want it to be reliably cancelled. Signed-off-by: Pavel Begunkov <asml.silence@gmail.com> Signed-off-by: Jens Axboe <axboe@kernel.dk>
-rw-r--r--fs/io_uring.c4
1 files changed, 2 insertions, 2 deletions
diff --git a/fs/io_uring.c b/fs/io_uring.c
index b1734efdc7e8..fb4abea1e5d6 100644
--- a/fs/io_uring.c
+++ b/fs/io_uring.c
@@ -703,7 +703,7 @@ enum {
/* fail rest of links */
REQ_F_FAIL_LINK = BIT(REQ_F_FAIL_LINK_BIT),
- /* on inflight list */
+ /* on inflight list, should be cancelled and waited on exit reliably */
REQ_F_INFLIGHT = BIT(REQ_F_INFLIGHT_BIT),
/* read/write uses file position */
REQ_F_CUR_POS = BIT(REQ_F_CUR_POS_BIT),
@@ -1069,7 +1069,7 @@ static bool io_match_task(struct io_kiocb *head,
return true;
io_for_each_link(req, head) {
- if (req->file && req->file->f_op == &io_uring_fops)
+ if (req->flags & REQ_F_INFLIGHT)
return true;
if (req->task->files == files)
return true;