Currently request cancellations are happening before PF_EXITING is set, so it's allowed to call task_work_run(). Even though it should work as it's not it's safer to remove PF_EXITING checks. Cc: stable@xxxxxxxxxxxxxxx # 5.5+ Signed-off-by: Pavel Begunkov <asml.silence@xxxxxxxxx> --- fs/io_uring.c | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/fs/io_uring.c b/fs/io_uring.c index ca46f314640b..8d4fa0031e0a 100644 --- a/fs/io_uring.c +++ b/fs/io_uring.c @@ -2361,12 +2361,8 @@ static inline unsigned int io_put_rw_kbuf(struct io_kiocb *req) static inline bool io_run_task_work(void) { - /* - * Not safe to run on exiting task, and the task_work handling will - * not add work to such a task. - */ - if (unlikely(current->flags & PF_EXITING)) - return false; + WARN_ON_ONCE(current->flags & PF_EXITING); + if (current->task_works) { __set_current_state(TASK_RUNNING); task_work_run(); -- 2.24.0