Hi Greg, Please consider this patchset, which include block/scsi multiqueue performance enhancement and bugfix. We've run multiple benchmark and different tests for over one week, looks good. These patches are also included in Oracle UEK5. They're almost just simple cherry-pick, only 2 patches need minor adjust. They can apply cleanly on 4.14.57. Jens Axboe (3): Revert "blk-mq: don't handle TAG_SHARED in restart" blk-mq: fix issue with shared tag queue re-running blk-mq: only run the hardware queue if IO is pending Jianchao Wang (1): blk-mq: put the driver tag of nxt rq before first one is requeued Ming Lei (19): blk-mq-sched: move actual dispatching into one helper blk-mq: introduce .get_budget and .put_budget in blk_mq_ops sbitmap: introduce __sbitmap_for_each_set() blk-mq-sched: improve dispatching from sw queue scsi: allow passing in null rq to scsi_prep_state_check() scsi: implement .get_budget and .put_budget for blk-mq SCSI: don't get target/host busy_count in scsi_mq_get_budget() blk-mq: don't handle TAG_SHARED in restart blk-mq: don't restart queue when .get_budget returns BLK_STS_RESOURCE blk-mq: don't handle failure in .get_budget blk-flush: don't run queue for requests bypassing flush block: pass 'run_queue' to blk_mq_request_bypass_insert blk-flush: use blk_mq_request_bypass_insert() blk-mq-sched: decide how to handle flush rq via RQF_FLUSH_SEQ blk-mq: move blk_mq_put_driver_tag*() into blk-mq.h blk-mq: don't allocate driver tag upfront for flush rq blk-mq: put driver tag if dispatch budget can't be got blk-mq: quiesce queue during switching io sched and updating nr_requests scsi: core: run queue if SCSI device queue isn't ready and queue is idle block/blk-core.c | 2 +- block/blk-flush.c | 37 +++++-- block/blk-mq-debugfs.c | 1 - block/blk-mq-sched.c | 203 ++++++++++++++++++++++------------- block/blk-mq.c | 278 +++++++++++++++++++++++++++--------------------- block/blk-mq.h | 58 +++++++++- block/elevator.c | 2 + drivers/scsi/scsi_lib.c | 53 ++++++--- include/linux/blk-mq.h | 20 +++- include/linux/sbitmap.h | 64 ++++++++--- 10 files changed, 475 insertions(+), 243 deletions(-) -- 2.7.4