]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
block, bfq: don't grab queue_lock to initialize bfq
authorYu Kuai <yukuai@fygo.io>
Mon, 8 Jun 2026 03:42:49 +0000 (11:42 +0800)
committerJens Axboe <axboe@kernel.dk>
Wed, 24 Jun 2026 12:42:31 +0000 (06:42 -0600)
The request_queue is frozen and quiesced while the elevator init_sched()
method runs, so queue_lock is not needed for BFQ cgroup initialization.

Signed-off-by: Yu Kuai <yukuai@fygo.io>
Link: https://patch.msgid.link/1965073ea20f33114a8d903816b986e483b9bb34.1780621988.git.yukuai@fygo.io
Signed-off-by: Jens Axboe <axboe@kernel.dk>
block/bfq-iosched.c

index eec9be62061bdd8737c91bd715c5be5169df50a3..0f75301b3115f8eb198b35e91277ff5adeaede13 100644 (file)
@@ -7204,10 +7204,7 @@ static int bfq_init_queue(struct request_queue *q, struct elevator_queue *eq)
                return -ENOMEM;
 
        eq->elevator_data = bfqd;
-
-       spin_lock_irq(&q->queue_lock);
        q->elevator = eq;
-       spin_unlock_irq(&q->queue_lock);
 
        /*
         * Our fallback bfqq if bfq_find_alloc_queue() runs into OOM issues.
@@ -7240,7 +7237,6 @@ static int bfq_init_queue(struct request_queue *q, struct elevator_queue *eq)
         * If the disk supports multiple actuators, copy independent
         * access ranges from the request queue structure.
         */
-       spin_lock_irq(&q->queue_lock);
        if (ia_ranges) {
                /*
                 * Check if the disk ia_ranges size exceeds the current bfq
@@ -7266,7 +7262,6 @@ static int bfq_init_queue(struct request_queue *q, struct elevator_queue *eq)
                bfqd->sector[0] = 0;
                bfqd->nr_sectors[0] = get_capacity(q->disk);
        }
-       spin_unlock_irq(&q->queue_lock);
 
        INIT_LIST_HEAD(&bfqd->dispatch);