[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <876d12ba-b71c-ba49-342e-6ad59b8dea15@gmail.com>
Date: Wed, 23 Jun 2021 23:02:22 +0100
From: Pavel Begunkov <asml.silence@...il.com>
To: Olivier Langlois <olivier@...llion01.com>,
Jens Axboe <axboe@...nel.dk>, io-uring@...r.kernel.org,
linux-kernel@...r.kernel.org
Subject: Re: [PATCH v2 1/2] io_uring: Fix race condition when sqp thread goes
to sleep
On 6/23/21 7:50 PM, Olivier Langlois wrote:
> If an asynchronous completion happens before the task is preparing
> itself to wait and set its state to TASK_INTERRUPTIBLE, the completion
> will not wake up the sqp thread.
Looks good, the bug should be pretty old.
Cc: stable@...r.kernel.org
Reviewed-by: Pavel Begunkov <asml.silence@...il.com>
> Signed-off-by: Olivier Langlois <olivier@...llion01.com>
> ---
> fs/io_uring.c | 2 +-
> 1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/fs/io_uring.c b/fs/io_uring.c
> index fc8637f591a6..7c545fa66f31 100644
> --- a/fs/io_uring.c
> +++ b/fs/io_uring.c
> @@ -6902,7 +6902,7 @@ static int io_sq_thread(void *data)
> }
>
> prepare_to_wait(&sqd->wait, &wait, TASK_INTERRUPTIBLE);
> - if (!io_sqd_events_pending(sqd)) {
> + if (!io_sqd_events_pending(sqd) && !io_run_task_work()) {
> needs_sched = true;
> list_for_each_entry(ctx, &sqd->ctx_list, sqd_list) {
> io_ring_set_wakeup_flag(ctx);
>
--
Pavel Begunkov
Powered by blists - more mailing lists