]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
block: fix elv_update_nr_hw_queues() to reattach elevator
authorNilay Shroff <nilay@linux.ibm.com>
Thu, 15 May 2025 13:44:39 +0000 (19:14 +0530)
committerJens Axboe <axboe@kernel.dk>
Thu, 15 May 2025 18:14:18 +0000 (12:14 -0600)
When nr_hw_queues is updated, the elevator needs to be switched to
ensure that we exit elevator and reattach it to ensure that hctx->
sched_tags is correctly allocated for the new hardware queues.
However, elv_update_nr_hw_queues() currently only switches the
elevator if the queue is not registered. This is incorrect, as it
prevents reattaching the elevator after updating nr_hw_queues, which
in turn inhibits allocation of sched_tags.

Fix this by allowing the elevator switch if the queue is registered,
ensuring proper reattachment and resource allocation.

Fixes: 596dce110b7d ("block: simplify elevator reattachment for updating nr_hw_queues")
Signed-off-by: Nilay Shroff <nilay@linux.ibm.com>
Link: https://lore.kernel.org/r/20250515134511.548270-1-nilay@linux.ibm.com
Signed-off-by: Jens Axboe <axboe@kernel.dk>
block/elevator.c

index f8d72bd206103090d2acc5d620267621b30d388f..ab22542e6cf0d1d29d631550d59b84a4871bcf53 100644 (file)
@@ -697,7 +697,7 @@ void elv_update_nr_hw_queues(struct request_queue *q)
        WARN_ON_ONCE(q->mq_freeze_depth == 0);
 
        mutex_lock(&q->elevator_lock);
-       if (q->elevator && !blk_queue_dying(q) && !blk_queue_registered(q)) {
+       if (q->elevator && !blk_queue_dying(q) && blk_queue_registered(q)) {
                ctx.name = q->elevator->type->elevator_name;
 
                /* force to reattach elevator after nr_hw_queue is updated */