From: Pavel Begunkov Date: Sun, 11 Apr 2021 00:46:38 +0000 (+0100) Subject: io_uring: improve sqo stop X-Git-Url: http://git.maquefel.me/?a=commitdiff_plain;h=88885f66e8c66311923c16caf1ccb6415ebfef72;p=linux.git io_uring: improve sqo stop Set IO_SQ_THREAD_SHOULD_STOP before taking sqd lock, so the sqpoll task sees earlier. Not a problem, it will stop eventually. Also check invariant that it's stopped only once. Signed-off-by: Pavel Begunkov Link: https://lore.kernel.org/r/653b24ee93843a50ff65a45847d9138f5adb76d7.1618101759.git.asml.silence@gmail.com Signed-off-by: Jens Axboe --- diff --git a/fs/io_uring.c b/fs/io_uring.c index 880c7743ab090..7f2590c5d1943 100644 --- a/fs/io_uring.c +++ b/fs/io_uring.c @@ -7229,9 +7229,10 @@ static void io_sq_thread_park(struct io_sq_data *sqd) static void io_sq_thread_stop(struct io_sq_data *sqd) { WARN_ON_ONCE(sqd->thread == current); + WARN_ON_ONCE(test_bit(IO_SQ_THREAD_SHOULD_STOP, &sqd->state)); - mutex_lock(&sqd->lock); set_bit(IO_SQ_THREAD_SHOULD_STOP, &sqd->state); + mutex_lock(&sqd->lock); if (sqd->thread) wake_up_process(sqd->thread); mutex_unlock(&sqd->lock);