diff options
author | yangerkun <yangerkun@huawei.com> | 2021-03-09 04:04:10 +0100 |
---|---|---|
committer | Jens Axboe <axboe@kernel.dk> | 2021-03-10 15:28:42 +0100 |
commit | 70e35125093b05b0e607ba1f5358ddf76946756c (patch) | |
tree | b29a9e05950688d92122fc13b5164c4e292230cd /fs/io-wq.c | |
parent | io_uring: fix complete_post races for linked req (diff) | |
download | linux-70e35125093b05b0e607ba1f5358ddf76946756c.tar.xz linux-70e35125093b05b0e607ba1f5358ddf76946756c.zip |
io-wq: fix ref leak for req in case of exit cancelations
do_work such as io_wq_submit_work that cancel the work may leave a ref of
req as 1 if we have links. Fix it by call io_run_cancel.
Fixes: 4fb6ac326204 ("io-wq: improve manager/worker handling over exec")
Signed-off-by: yangerkun <yangerkun@huawei.com>
Link: https://lore.kernel.org/r/20210309030410.3294078-1-yangerkun@huawei.com
Signed-off-by: Jens Axboe <axboe@kernel.dk>
Diffstat (limited to 'fs/io-wq.c')
-rw-r--r-- | fs/io-wq.c | 3 |
1 files changed, 1 insertions, 2 deletions
diff --git a/fs/io-wq.c b/fs/io-wq.c index c2e7031f6d09..3d7060ba547a 100644 --- a/fs/io-wq.c +++ b/fs/io-wq.c @@ -799,8 +799,7 @@ static void io_wqe_enqueue(struct io_wqe *wqe, struct io_wq_work *work) /* Can only happen if manager creation fails after exec */ if (io_wq_fork_manager(wqe->wq) || test_bit(IO_WQ_BIT_EXIT, &wqe->wq->state)) { - work->flags |= IO_WQ_WORK_CANCEL; - wqe->wq->do_work(work); + io_run_cancel(work, wqe); return; } |