]> www.infradead.org Git - users/hch/misc.git/commitdiff
block: move hctx cpuhp add/del out of queue freezing
authorMing Lei <ming.lei@redhat.com>
Mon, 5 May 2025 14:18:02 +0000 (22:18 +0800)
committerJens Axboe <axboe@kernel.dk>
Tue, 6 May 2025 13:43:43 +0000 (07:43 -0600)
Move hctx cpuhp add/del out of queue freezing for not connecting freeze
lock with cpuhp locks, then lockdep warning can be avoided.

This way is safe because both needn't queue to be frozen and scheduler
switch isn't allowed, with same reason for moving hctx debugfs/sysfs
register out of queue freeze.

Reviewed-by: Hannes Reinecke <hare@suse.de>
Reviewed-by: Nilay Shroff <nilay@linux.ibm.com>
Signed-off-by: Ming Lei <ming.lei@redhat.com>
Reviewed-by: Christoph Hellwig <hch@lst.de>
Link: https://lore.kernel.org/r/20250505141805.2751237-25-ming.lei@redhat.com
Signed-off-by: Jens Axboe <axboe@kernel.dk>
block/blk-mq.c

index 38d0a41ff1ae9852b14497623e96e464973db4e3..4f79a9808fd170e01bcb0c462620a983b84bd487 100644 (file)
@@ -5008,7 +5008,7 @@ static void __blk_mq_update_nr_hw_queues(struct blk_mq_tag_set *set,
 fallback:
        blk_mq_update_queue_map(set);
        list_for_each_entry(q, &set->tag_list, tag_set_list) {
-               blk_mq_realloc_hw_ctxs(set, q);
+               __blk_mq_realloc_hw_ctxs(set, q);
 
                if (q->nr_hw_queues != set->nr_hw_queues) {
                        int i = prev_nr_hw_queues;
@@ -5032,6 +5032,9 @@ reregister:
        list_for_each_entry(q, &set->tag_list, tag_set_list) {
                blk_mq_sysfs_register_hctxs(q);
                blk_mq_debugfs_register_hctxs(q);
+
+               blk_mq_remove_hw_queues_cpuhp(q);
+               blk_mq_add_hw_queues_cpuhp(q);
        }
        memalloc_noio_restore(memflags);