io_uring/io-wq: don't grab wq->lock for worker activation
authorJens Axboe <axboe@kernel.dk>
Wed, 9 Aug 2023 18:58:59 +0000 (12:58 -0600)
committerJens Axboe <axboe@kernel.dk>
Fri, 11 Aug 2023 16:36:12 +0000 (10:36 -0600)
The worker free list is RCU protected, and checks for workers going away
when iterating it. There's no need to hold the wq->lock around the
lookup.

Reviewed-by: Hao Xu <howeyxu@tencent.com>
Signed-off-by: Jens Axboe <axboe@kernel.dk>
io_uring/io-wq.c

index 399e9a1..3e7025b 100644 (file)
@@ -909,13 +909,10 @@ void io_wq_enqueue(struct io_wq *wq, struct io_wq_work *work)
        clear_bit(IO_ACCT_STALLED_BIT, &acct->flags);
        raw_spin_unlock(&acct->lock);
 
-       raw_spin_lock(&wq->lock);
        rcu_read_lock();
        do_create = !io_wq_activate_free_worker(wq, acct);
        rcu_read_unlock();
 
-       raw_spin_unlock(&wq->lock);
-
        if (do_create && ((work_flags & IO_WQ_WORK_CONCURRENT) ||
            !atomic_read(&acct->nr_running))) {
                bool did_create;