return;
 
        memflags = memalloc_noio_save();
-       list_for_each_entry(q, &set->tag_list, tag_set_list)
-               blk_mq_freeze_queue_nomemsave(q);
-
        list_for_each_entry(q, &set->tag_list, tag_set_list) {
                blk_mq_debugfs_unregister_hctxs(q);
                blk_mq_sysfs_unregister_hctxs(q);
        }
 
+       list_for_each_entry(q, &set->tag_list, tag_set_list)
+               blk_mq_freeze_queue_nomemsave(q);
+
        if (blk_mq_realloc_tag_set_tags(set, nr_hw_queues) < 0)
                goto reregister;
 
                blk_mq_map_swqueue(q);
        }
 
+       /* elv_update_nr_hw_queues() unfreeze queue for us */
+       list_for_each_entry(q, &set->tag_list, tag_set_list)
+               elv_update_nr_hw_queues(q);
+
 reregister:
        list_for_each_entry(q, &set->tag_list, tag_set_list) {
                blk_mq_sysfs_register_hctxs(q);
                blk_mq_debugfs_register_hctxs(q);
        }
-
-       /* elv_update_nr_hw_queues() unfreeze queue for us */
-       list_for_each_entry(q, &set->tag_list, tag_set_list)
-               elv_update_nr_hw_queues(q);
-
        memalloc_noio_restore(memflags);
 
        /* Free the excess tags when nr_hw_queues shrink. */