On 4/24/21 10:26 AM, Hao Xu wrote: > we shall update sq_thread_idle anytime we do ctx deletion from ctx_list looks good, a nit below > > Fixes:734551df6f9b ("io_uring: fix shared sqpoll cancellation hangs") > Signed-off-by: Hao Xu <haoxu@xxxxxxxxxxxxxxxxx> > --- > fs/io_uring.c | 3 ++- > 1 file changed, 2 insertions(+), 1 deletion(-) > > diff --git a/fs/io_uring.c b/fs/io_uring.c > index 40f38256499c..15f204274761 100644 > --- a/fs/io_uring.c > +++ b/fs/io_uring.c > @@ -8867,6 +8867,7 @@ static void io_sqpoll_cancel_cb(struct callback_head *cb) > if (sqd->thread) > io_uring_cancel_sqpoll(sqd); > list_del_init(&work->ctx->sqd_list); > + io_sqd_update_thread_idle(sqd); > complete(&work->completion); > } > > @@ -8877,7 +8878,6 @@ static void io_sqpoll_cancel_sync(struct io_ring_ctx *ctx) > struct task_struct *task; > > io_sq_thread_park(sqd); > - io_sqd_update_thread_idle(sqd); > task = sqd->thread; > if (task) { > init_completion(&work.completion); > @@ -8886,6 +8886,7 @@ static void io_sqpoll_cancel_sync(struct io_ring_ctx *ctx) > wake_up_process(task); > } else { > list_del_init(&ctx->sqd_list); > + io_sqd_update_thread_idle(sqd); Not actually needed, it's already dying. > } > io_sq_thread_unpark(sqd); > > -- Pavel Begunkov