|
@@ -551,12 +551,19 @@ int blk_register_queue(struct gendisk *disk)
|
|
return -ENXIO;
|
|
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)) {
|
|
if (!blk_queue_init_done(q)) {
|
|
queue_flag_set_unlocked(QUEUE_FLAG_INIT_DONE, q);
|
|
queue_flag_set_unlocked(QUEUE_FLAG_INIT_DONE, q);
|
|
blk_queue_bypass_end(q);
|
|
blk_queue_bypass_end(q);
|
|
|
|
+ if (q->mq_ops)
|
|
|
|
+ blk_mq_finish_init(q);
|
|
}
|
|
}
|
|
|
|
|
|
ret = blk_trace_init_sysfs(dev);
|
|
ret = blk_trace_init_sysfs(dev);
|