Merge branch 'for-3.18' of git://git.kernel.org/pub/scm/linux/kernel/git/tj/percpu
[cascardo/linux.git] / block / blk-sysfs.c
index 17f5c84..521ae90 100644 (file)
@@ -551,12 +551,19 @@ int blk_register_queue(struct gendisk *disk)
                return -ENXIO;
 
        /*
-        * Initialization must be complete by now.  Finish the initial
-        * bypass from queue allocation.
+        * SCSI probing may synchronously create and destroy a lot of
+        * request_queues for non-existent devices.  Shutting down a fully
+        * functional queue takes measureable wallclock time as RCU grace
+        * periods are involved.  To avoid excessive latency in these
+        * cases, a request_queue starts out in a degraded mode which is
+        * faster to shut down and is made fully functional here as
+        * request_queues for non-existent devices never get registered.
         */
        if (!blk_queue_init_done(q)) {
                queue_flag_set_unlocked(QUEUE_FLAG_INIT_DONE, q);
                blk_queue_bypass_end(q);
+               if (q->mq_ops)
+                       blk_mq_finish_init(q);
        }
 
        ret = blk_trace_init_sysfs(dev);