block: introduce blk_init_flush and its pair
[cascardo/linux.git] / block / blk-sysfs.c
index 23321fb..9490759 100644 (file)
@@ -517,11 +517,11 @@ static void blk_release_queue(struct kobject *kobj)
        if (q->queue_tags)
                __blk_queue_free_tags(q);
 
+       blk_exit_flush(q);
+
        if (q->mq_ops)
                blk_mq_free_queue(q);
 
-       kfree(q->flush_rq);
-
        blk_trace_shutdown(q);
 
        bdi_destroy(&q->backing_dev_info);
@@ -554,8 +554,10 @@ int blk_register_queue(struct gendisk *disk)
         * Initialization must be complete by now.  Finish the initial
         * bypass from queue allocation.
         */
-       blk_queue_bypass_end(q);
-       queue_flag_set_unlocked(QUEUE_FLAG_INIT_DONE, q);
+       if (!blk_queue_init_done(q)) {
+               queue_flag_set_unlocked(QUEUE_FLAG_INIT_DONE, q);
+               blk_queue_bypass_end(q);
+       }
 
        ret = blk_trace_init_sysfs(dev);
        if (ret)