[PATCH RFC v2 0/5] blk-mq/scsi: Provide hostwide shared tags for SCSI HBAs

From: John Garry
Date: Tue Nov 19 2019 - 09:31:18 EST


This is another stab at solving the problem of hostwide shared tags for SCSI
HBAs.

As discussed previously, Ming Lei's most recent series in [0] to use
hctx[0] tags for all hctx for a host was a bit messy and intrusive, so seen
as a no go. Indeed, blk-mq is designed for separate tags per hctx.

Bart also followed up on my v1 RFC with another implementation along those
same lines, which was neater, but I am concerned that the change in this
approach may cause issues - see [1].

This series introduces a different approach to solve that problem, in
keeping the per-hctx tags but introducing a new separate sbitmap per
tagset. The shared sbitmap is used to generate a unique tag over all hctx per
tagset.

Currently I just fixed up the hisi_sas driver to use the shared tags,
but should not be much trouble to change others over.

Patch #3 is still quite experimental at this point - I added some code
comments on this. I also threw in a minor tidy-up patch.

[0] https://lore.kernel.org/linux-block/20190531022801.10003-1-ming.lei@xxxxxxxxxx/
[1] https://lore.kernel.org/linux-block/ff77beff-5fd9-9f05-12b6-826922bace1f@xxxxxxxxxx/T/#m3db0a602f095cbcbff27e9c884d6b4ae826144be

Differences to v1:
- Use a shared sbitmap, and not a separate shared tags (a big change!)
- Drop request.shared_tag
- Add RB tags

Hannes Reinecke (1):
scsi: Add template flag 'host_tagset'

John Garry (3):
blk-mq: Remove some unused function arguments
blk-mq: Facilitate a shared sbitmap per tagset
scsi: hisi_sas: Switch v3 hw to MQ

Ming Lei (1):
blk-mq: rename BLK_MQ_F_TAG_SHARED as BLK_MQ_F_TAG_QUEUE_SHARED

block/bfq-iosched.c | 4 +-
block/blk-mq-debugfs.c | 6 +-
block/blk-mq-sched.c | 14 +++++
block/blk-mq-tag.c | 80 +++++++++++++++++------
block/blk-mq-tag.h | 18 ++++--
block/blk-mq.c | 87 ++++++++++++++++++++------
block/blk-mq.h | 7 ++-
block/kyber-iosched.c | 4 +-
drivers/scsi/hisi_sas/hisi_sas.h | 3 +-
drivers/scsi/hisi_sas/hisi_sas_main.c | 36 ++++++-----
drivers/scsi/hisi_sas/hisi_sas_v3_hw.c | 86 +++++++++++--------------
drivers/scsi/scsi_lib.c | 2 +
include/linux/blk-mq.h | 9 ++-
include/scsi/scsi_host.h | 3 +
14 files changed, 239 insertions(+), 120 deletions(-)

--
2.17.1