mbox series

[PATCHv6,00/21] scsi: enable reserved commands for LLDDs

Message ID 20200703130122.111448-1-hare@suse.de (mailing list archive)
Headers show
Series scsi: enable reserved commands for LLDDs | expand

Message

Hannes Reinecke July 3, 2020, 1:01 p.m. UTC
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.

The entire patchset can be found at

git://git.kernel.org/pub/scm/linux/kernel/git/hare/scsi-devel.git reserved-tags.v6

As usual, comments and reviews are welcome.

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 (21):
  scsi: drop gdth driver
  block: add flag for internal commands
  scsi: add scsi_{get,put}_internal_cmd() helper
  fnic: use internal commands
  fnic: use scsi_host_busy_iter() to traverse commands
  fnic: check for started requests in fnic_wq_copy_cleanup_handler()
  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
  snic: check for started requests in snic_hba_reset_cmpl_handler()
  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

 Documentation/kbuild/makefiles.rst                 |    4 +-
 Documentation/process/magic-number.rst             |    2 -
 Documentation/scsi/scsi-parameters.rst             |    3 -
 Documentation/userspace-api/ioctl/ioctl-number.rst |    1 -
 block/blk-exec.c                                   |    5 +
 drivers/scsi/Kconfig                               |   14 -
 drivers/scsi/Makefile                              |    2 -
 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                     |  109 +-
 drivers/scsi/aacraid/dpcsup.c                      |    2 +-
 drivers/scsi/aacraid/linit.c                       |  175 +-
 drivers/scsi/fnic/fnic_scsi.c                      |  944 ++---
 drivers/scsi/gdth.c                                | 4323 --------------------
 drivers/scsi/gdth.h                                |  981 -----
 drivers/scsi/gdth_ioctl.h                          |  251 --
 drivers/scsi/gdth_proc.c                           |  586 ---
 drivers/scsi/gdth_proc.h                           |   18 -
 drivers/scsi/hosts.c                               |    3 +
 drivers/scsi/hpsa.c                                |  368 +-
 drivers/scsi/hpsa.h                                |    3 +-
 drivers/scsi/hpsa_cmd.h                            |    1 -
 drivers/scsi/scsi_devinfo.c                        |    1 +
 drivers/scsi/scsi_lib.c                            |   55 +-
 drivers/scsi/scsi_scan.c                           |   96 +-
 drivers/scsi/scsi_sysfs.c                          |    3 +-
 drivers/scsi/snic/snic.h                           |    4 +-
 drivers/scsi/snic/snic_main.c                      |    7 +
 drivers/scsi/snic/snic_scsi.c                      |  525 ++-
 include/linux/blk_types.h                          |    2 +
 include/linux/blkdev.h                             |    5 +
 include/scsi/scsi_device.h                         |    4 +
 include/scsi/scsi_host.h                           |   36 +-
 35 files changed, 1233 insertions(+), 7474 deletions(-)
 delete mode 100644 drivers/scsi/gdth.c
 delete mode 100644 drivers/scsi/gdth.h
 delete mode 100644 drivers/scsi/gdth_ioctl.h
 delete mode 100644 drivers/scsi/gdth_proc.c
 delete mode 100644 drivers/scsi/gdth_proc.h

Comments

John Garry Oct. 27, 2020, 3:27 p.m. UTC | #1
On 03/07/2020 14:01, Hannes Reinecke wrote:
> 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.
> 
> The entire patchset can be found at
> 
> git://git.kernel.org/pub/scm/linux/kernel/git/hare/scsi-devel.git reserved-tags.v6
> 

Hi Hannes,

Any chance you can repost this series? I'm being a bit of a nag :)

It now looks like some drivers may also need this for supporting 
io_uring in SCSI mid-layer:
https://lore.kernel.org/linux-scsi/20201015133541.60400-1-kashyap.desai@broadcom.com/

And it's also useful for the runtime PM which we were supporting for 
hisi_sas, to track IOs.

I know that you were hoping for a few more reviews, but I don't think 
that they are coming for v6 now. And at least I gave a few comments 
here, like:

https://lore.kernel.org/linux-scsi/b03c1256-8255-5e7f-dda3-df036aaef812@huawei.com/

And there were other comments.

Please let me know.

Cheers,
John
Hannes Reinecke Oct. 27, 2020, 3:53 p.m. UTC | #2
On 10/27/20 4:27 PM, John Garry wrote:
> On 03/07/2020 14:01, Hannes Reinecke wrote:
>> 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.
>>
>> The entire patchset can be found at
>>
>> git://git.kernel.org/pub/scm/linux/kernel/git/hare/scsi-devel.git 
>> reserved-tags.v6
>>
> 
> Hi Hannes,
> 
> Any chance you can repost this series? I'm being a bit of a nag :)
> 
> It now looks like some drivers may also need this for supporting 
> io_uring in SCSI mid-layer:
> https://lore.kernel.org/linux-scsi/20201015133541.60400-1-kashyap.desai@broadcom.com/ 
> 
> 
> And it's also useful for the runtime PM which we were supporting for 
> hisi_sas, to track IOs.
> 
> I know that you were hoping for a few more reviews, but I don't think 
> that they are coming for v6 now. And at least I gave a few comments 
> here, like:
> 
> https://lore.kernel.org/linux-scsi/b03c1256-8255-5e7f-dda3-df036aaef812@huawei.com/ 
> 
> 
> And there were other comments.
> 
That was actually on the list of things to do next, ie rebasing this 
series now that the shared tags patchset is in.

Oh, and I do have an updated hpsa patch, which doesn't crash on my 
systems. Will be posting that one separately.

Cheers,

Hannes
John Garry Oct. 27, 2020, 4:59 p.m. UTC | #3
On 27/10/2020 15:53, Hannes Reinecke wrote:
>>
> That was actually on the list of things to do next, ie rebasing this 
> series now that the shared tags patchset is in.
> 

Sounds good.

> Oh, and I do have an updated hpsa patch, which doesn't crash on my 
> systems. Will be posting that one separately.

I always thought that change (switch to MQ) looked better with $subject 
series, but I'll leave that to you and Don.

cheers,
John
Hannes Reinecke Oct. 27, 2020, 5:07 p.m. UTC | #4
On 10/27/20 5:59 PM, John Garry wrote:
> On 27/10/2020 15:53, Hannes Reinecke wrote:
>>>
>> That was actually on the list of things to do next, ie rebasing this 
>> series now that the shared tags patchset is in.
>>
> 
> Sounds good.
> 
>> Oh, and I do have an updated hpsa patch, which doesn't crash on my 
>> systems. Will be posting that one separately.
> 
> I always thought that change (switch to MQ) looked better with $subject 
> series, but I'll leave that to you and Don.
> 
Yes, same here; with reserved commands hpsa becomes _much_ easier.

Now I only need to figure out a way how to handle consecutive tags;
for some drivers not only the command needs a tag, but the sgls also, 
thereby completely messing up our mq tags logic.
So to map those we'd need to allocate _several_ tags for one command, 
_and_ these additional tags won't be of 'struct request'.
Maybe we can do some tag chaining ...

But I'll be updating the patchset.

Cheers,

Hannes