block: don't quiesce queue for calling elevator_set_none()

blk_mq_freeze_queue() can't be called on quiesced queue, otherwise it may
never return if there is any queued requests.

Fix it by removing quiesce queue around elevator_set_none() because
elevator_switch() does quiesce queue in case that we need to switch
to none really.

Fixes: 1e44bedbc9 ("block: unifying elevator change")
Signed-off-by: Ming Lei <ming.lei@redhat.com>
Reviewed-by: Christoph Hellwig <hch@lst.de>
Reviewed-by: Nilay Shroff <nilay@linux.ibm.com>
Link: https://lore.kernel.org/r/20250508085807.3175112-2-ming.lei@redhat.com
Signed-off-by: Jens Axboe <axboe@kernel.dk>
This commit is contained in:
Ming Lei
2025-05-08 16:58:04 +08:00
committed by Jens Axboe
parent 037af79355
commit 8336d18c6b

View File

@@ -948,11 +948,8 @@ void blk_unregister_queue(struct gendisk *disk)
blk_mq_sysfs_unregister(disk);
blk_crypto_sysfs_unregister(disk);
if (queue_is_mq(q)) {
blk_mq_quiesce_queue(q);
if (queue_is_mq(q))
elevator_set_none(q);
blk_mq_unquiesce_queue(q);
}
mutex_lock(&q->sysfs_lock);
disk_unregister_independent_access_ranges(disk);