forked from Minki/linux
io_uring: ensure io-wq context is always destroyed for tasks
If the task ends up doing no IO, the context list is empty and we don't
call into __io_uring_files_cancel() when the task exits. This can cause
a leak of the io-wq structures.
Ensure we always call __io_uring_files_cancel(), even if the task
context list is empty.
Fixes: 5aa75ed5b9
("io_uring: tie async worker side to the task context")
Signed-off-by: Jens Axboe <axboe@kernel.dk>
This commit is contained in:
parent
0100e6bbdb
commit
8a378fb096
@ -8800,9 +8800,10 @@ void __io_uring_files_cancel(struct files_struct *files)
|
||||
|
||||
if (files) {
|
||||
io_uring_remove_task_files(tctx);
|
||||
} else if (tctx->io_wq && current->flags & PF_EXITING) {
|
||||
io_wq_destroy(tctx->io_wq);
|
||||
tctx->io_wq = NULL;
|
||||
if (tctx->io_wq) {
|
||||
io_wq_destroy(tctx->io_wq);
|
||||
tctx->io_wq = NULL;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -43,7 +43,7 @@ static inline void io_uring_task_cancel(void)
|
||||
}
|
||||
static inline void io_uring_files_cancel(struct files_struct *files)
|
||||
{
|
||||
if (current->io_uring && !xa_empty(¤t->io_uring->xa))
|
||||
if (current->io_uring)
|
||||
__io_uring_files_cancel(files);
|
||||
}
|
||||
static inline void io_uring_free(struct task_struct *tsk)
|
||||
|
Loading…
Reference in New Issue
Block a user