per-tagset SRCU struct and quiesce v3

Christoph Hellwig
2022-11-01T15:01:06Z

Hi all,

this series moves the SRCU struct used for quiescing to the tag_set
as the SRCU critical sections for dispatch take about the same time
on all queues anyway, and then adopts the series from Chao that provides
tagset-wide quiesce to use that infrastructure.

To do so this series cleans up a lot of code in nvme that is related
to quiescing queues.

Changes since v2:
- check blk_queue_skip_tagset_quiesce in blk_mq_unquiesce_tagset
- drop "nvme-pci: don't warn about the lack of I/O queues for admin
controllers"
- drop "nvme: don't call nvme_kill_queues from nvme_remove_namespaces"
- drop "nvme-pci: mark the namespaces dead earlier in nvme_remove"
- minor fixups for the above dropped patches
- fix up a few commit messages

Changes since v1:
- a whole bunch of new nvme cleanups
- use the notify version of set_capacity in blk_mark_disk_dead
- improve the documentation for blk_mq_wait_quiesce_done
- dynamically allocate the srcu_struct in struct blk_mq_tag_set
- minor spelling fixes