Hi, The 1st two patches cleanes up blk_mq_get_driver_tag() and blk_mq_mark_tag_wait(). The 3rd patch fixes one race between adding hctx->dispatch_wait to wq and removing it from wq. The 4th patch avoids to iterate on all queues which share same tags after completing one request, so that we can kill the synchronize_rcu() in patch of queue cleanup, then long delay can be avoided during SCSI LUN probe. Meantime IO performance can be improved. The 5th patch avoids to synchronizing rcu in blk_cleanup_queue() when queue isn't initialized, so long delay can be avoided during SCSI LUN probe too. Ming Lei (5): blk-mq: cleanup blk_mq_get_driver_tag() blk-mq: don't pass **hctx to blk_mq_mark_tag_wait() blk-mq: introduce new lock for protecting hctx->dispatch_wait blk-mq: remove synchronize_rcu() from blk_mq_del_queue_tag_set() blk-mq: avoid to synchronize rcu inside blk_cleanup_queue() block/blk-core.c | 8 +++-- block/blk-mq-sched.c | 85 +++----------------------------------------------- block/blk-mq.c | 68 +++++++++++++++++++--------------------- block/blk-mq.h | 3 +- include/linux/blk-mq.h | 1 + include/linux/blkdev.h | 2 -- 6 files changed, 45 insertions(+), 122 deletions(-) Cc: Omar Sandoval <osandov@xxxxxx> Cc: Andrew Jones <drjones@xxxxxxxxxx> Cc: Bart Van Assche <bart.vanassche@xxxxxxx> Cc: linux-scsi@xxxxxxxxxxxxxxx Cc: "Martin K. Petersen" <martin.petersen@xxxxxxxxxx> Cc: Christoph Hellwig <hch@xxxxxx> -- 2.9.5