From: Hannes Reinecke <hare@suse.de>
To: "Martin K. Petersen" <martin.petersen@oracle.com>
Cc: Christoph Hellwig <hch@lst.de>,
James Bottomley <james.bottomley@hansenpartnership.com>,
John Garry <john.garry@huawei.com>,
linux-scsi@vger.kernel.org, Hannes Reinecke <hare@suse.de>
Subject: [PATCHv8 00/18] scsi: enabled reserved commands for LLDDs
Date: Mon, 3 May 2021 17:03:15 +0200 [thread overview]
Message-ID: <20210503150333.130310-1-hare@suse.de> (raw)
Hi all,
quite some drivers use internal commands for various purposes, most
commonly sending TMFs or querying the HBA status.
While these commands use the same submission mechanism than normal
I/O commands, they will not be counted as outstanding commands,
requiring those drivers to implement their own mechanism to figure
out outstanding commands.
The block layer already has the concept of 'reserved' tags for
precisely this purpose, namely non-I/O tags which live off a separate
tag pool. That guarantees that these commands can always be sent,
and won't be influenced by tag starvation from the I/O tag pool.
This patchset enables the use of reserved tags for the SCSI midlayer
by allocating a virtual LUN for the HBA itself which just serves
as a resource to allocate valid tags from.
This removes quite some hacks which were required for some
drivers (eg. fnic or snic), and allows the use of tagset
iterators within the drivers.
Command allocation currently ignores the hardware queues, as none
of the modified drivers is mq-capable.
The entire patchset can be found at
git://git.kernel.org/pub/scm/linux/kernel/git/hare/scsi-devel.git
reserved-tags.v8
This patchset also includes the busy_iter patches for fnic, which
were also sent as a separate patchset. So if they are applied
separately they can be dropped from this patchset.
As usual, comments and reviews are welcome.
Changes to v7:
- Drop changes to hisi_sas, pm8001, and mv_sas
- Drop patch to introduce REQ_INTERNAL flag
- Include reviews from John Garry
Changes to v6:
- Remove patch to drop gdth
- Rework libsas to use a tag per slow task
- Update hisi_sas, pm8001, and mv_sas
Changes to v5:
- Remove patch for csiostor
- Warn on normal commands in scsi_put_reserved_cmd()
- Fixup aacraid to not only scsi_put_internal_cmd() for
reserved commands
- Add 'nr_reserved_cmds' field to host template
- Reshuffle patches
Changes to v4:
- Fixup kbuild warning
- Include reviews from Bart
Changes to v3:
- Kill gdth
- Only convert fnic, snic, hpsa, and aacraid
- Drop command emulation for pseudo host device
- make 'can_queue' exclude the number or reserved tags
- Drop persistent commands proposal
- Sanitize host device handling
Changes to v2:
- Update patches from John Garry
- Use virtual LUN as suggested by Christoph
- Improve SCSI Host device to present a real SCSI device
- Implement 'persistent' commands for AENs
- Convert Megaraid SAS
Changes to v1:
- Make scsi_{get, put}_reserved_cmd() for Scsi host
- Previously we separate scsi_{get, put}_reserved_cmd() for sdev
and scsi_host_get_reserved_cmd() for the host
- Fix how Scsi_Host.can_queue is set in the virtio-scsi change
- Drop Scsi_Host.use_reserved_cmd_q
- Drop scsi_is_reserved_cmd()
- Add support in libsas and associated HBA drivers
- Allocate reserved command in slow task
- Switch hisi_sas to use reserved Scsi command
- Reorder the series a little
- Some tidying
Hannes Reinecke (18):
fnic: kill 'exclude_id' argument to fnic_cleanup_io()
fnic: use scsi_host_busy_iter() to traverse commands
scsi: add scsi_{get,put}_internal_cmd() helper
fnic: use internal commands
scsi: use real inquiry data when initialising devices
scsi: Use dummy inquiry data for the host device
scsi: revamp host device handling
snic: use reserved commands
snic: use tagset iter for traversing commands
scsi: implement reserved command handling
hpsa: move hpsa_hba_inquiry after scsi_add_host()
hpsa: use reserved commands
hpsa: use scsi_host_busy_iter() to traverse outstanding commands
hpsa: drop refcount field from CommandList
aacraid: move scsi_add_host()
aacraid: store target id in host_scribble
aacraid: use scsi_get_internal_cmd()
aacraid: use scsi_host_busy_iter() to traverse outstanding commands
drivers/scsi/aacraid/aachba.c | 137 ++---
drivers/scsi/aacraid/aacraid.h | 10 +-
drivers/scsi/aacraid/commctrl.c | 25 +-
drivers/scsi/aacraid/comminit.c | 2 +-
drivers/scsi/aacraid/commsup.c | 118 ++--
drivers/scsi/aacraid/dpcsup.c | 2 +-
drivers/scsi/aacraid/linit.c | 175 +++---
drivers/scsi/fnic/fnic_scsi.c | 927 +++++++++++++++-----------------
drivers/scsi/hosts.c | 3 +
drivers/scsi/hpsa.c | 365 ++++++-------
drivers/scsi/hpsa.h | 3 +-
drivers/scsi/hpsa_cmd.h | 10 -
drivers/scsi/scsi_devinfo.c | 1 +
drivers/scsi/scsi_lib.c | 48 +-
drivers/scsi/scsi_scan.c | 96 ++--
drivers/scsi/scsi_sysfs.c | 5 +-
drivers/scsi/snic/snic.h | 4 +-
drivers/scsi/snic/snic_main.c | 7 +
drivers/scsi/snic/snic_scsi.c | 524 +++++++++---------
include/scsi/scsi_device.h | 3 +
include/scsi/scsi_host.h | 36 +-
21 files changed, 1234 insertions(+), 1267 deletions(-)
--
2.29.2
next reply other threads:[~2021-05-03 15:03 UTC|newest]
Thread overview: 55+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-05-03 15:03 Hannes Reinecke [this message]
2021-05-03 15:03 ` [PATCH 01/18] fnic: kill 'exclude_id' argument to fnic_cleanup_io() Hannes Reinecke
2021-05-04 2:12 ` Bart Van Assche
2021-05-04 9:49 ` Christoph Hellwig
2021-05-03 15:03 ` [PATCH 02/18] fnic: use scsi_host_busy_iter() to traverse commands Hannes Reinecke
2021-05-04 9:50 ` Christoph Hellwig
2021-05-04 12:53 ` Hannes Reinecke
2021-05-03 15:03 ` [PATCH 03/18] scsi: add scsi_{get,put}_internal_cmd() helper Hannes Reinecke
2021-05-04 2:21 ` Bart Van Assche
2021-05-04 6:12 ` Hannes Reinecke
2021-06-23 10:57 ` John Garry
2021-06-23 13:48 ` Hannes Reinecke
2021-06-24 9:55 ` John Garry
2021-05-04 9:53 ` Christoph Hellwig
2021-05-04 12:54 ` Hannes Reinecke
2021-06-23 16:09 ` Bart Van Assche
2021-05-03 15:03 ` [PATCH 04/18] fnic: use internal commands Hannes Reinecke
2021-05-04 2:25 ` Bart Van Assche
2021-05-04 6:12 ` Hannes Reinecke
2021-05-03 15:03 ` [PATCH 05/18] scsi: use real inquiry data when initialising devices Hannes Reinecke
2021-05-04 2:28 ` Bart Van Assche
2021-05-04 9:55 ` Christoph Hellwig
2021-05-04 12:57 ` Hannes Reinecke
2021-05-03 15:03 ` [PATCH 06/18] scsi: Use dummy inquiry data for the host device Hannes Reinecke
2021-05-04 2:52 ` Bart Van Assche
2021-05-04 6:14 ` Hannes Reinecke
2021-05-03 15:03 ` [PATCH 07/18] scsi: revamp host device handling Hannes Reinecke
2021-05-04 3:06 ` Bart Van Assche
2021-05-04 6:15 ` Hannes Reinecke
2021-05-04 9:59 ` Christoph Hellwig
2021-05-04 13:10 ` Hannes Reinecke
2021-05-03 15:03 ` [PATCH 08/18] snic: use reserved commands Hannes Reinecke
2021-05-04 3:12 ` Bart Van Assche
2021-05-04 6:16 ` Hannes Reinecke
2021-05-03 15:03 ` [PATCH 09/18] snic: use tagset iter for traversing commands Hannes Reinecke
2021-05-04 9:59 ` Christoph Hellwig
2021-05-03 15:03 ` [PATCH 10/18] scsi: implement reserved command handling Hannes Reinecke
2021-05-04 3:20 ` Bart Van Assche
2021-05-04 6:17 ` Hannes Reinecke
2021-05-04 10:55 ` John Garry
2021-05-04 13:12 ` Hannes Reinecke
2021-05-04 16:59 ` Bart Van Assche
2021-05-04 18:09 ` Hannes Reinecke
2021-05-05 0:45 ` Bart Van Assche
2021-05-05 5:56 ` Hannes Reinecke
2021-05-03 15:03 ` [PATCH 11/18] hpsa: move hpsa_hba_inquiry after scsi_add_host() Hannes Reinecke
2021-05-03 15:03 ` [PATCH 12/18] hpsa: use reserved commands Hannes Reinecke
2021-05-03 15:03 ` [PATCH 13/18] hpsa: use scsi_host_busy_iter() to traverse outstanding commands Hannes Reinecke
2021-05-03 15:03 ` [PATCH 14/18] hpsa: drop refcount field from CommandList Hannes Reinecke
2021-05-03 15:03 ` [PATCH 15/18] aacraid: move scsi_add_host() Hannes Reinecke
2021-05-03 15:03 ` [PATCH 16/18] aacraid: store target id in host_scribble Hannes Reinecke
2021-05-04 3:22 ` Bart Van Assche
2021-05-04 6:18 ` Hannes Reinecke
2021-05-03 15:03 ` [PATCH 17/18] aacraid: use scsi_get_internal_cmd() Hannes Reinecke
2021-05-03 15:03 ` [PATCH 18/18] aacraid: use scsi_host_busy_iter() to traverse outstanding commands Hannes Reinecke
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20210503150333.130310-1-hare@suse.de \
--to=hare@suse.de \
--cc=hch@lst.de \
--cc=james.bottomley@hansenpartnership.com \
--cc=john.garry@huawei.com \
--cc=linux-scsi@vger.kernel.org \
--cc=martin.petersen@oracle.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox