linux/drivers/nvme/target
Sagi Grimberg e7832cb48a nvme: make fabrics command run on a separate request queue
We have a fundamental issue that fabric commands use the admin_q.
The reason is, that admin-connect, register reads and writes and
admin commands cannot be guaranteed ordering while we are running
controller resets.

For example, when we reset a controller we perform:
1. disable the controller
2. teardown the admin queue
3. re-establish the admin queue
4. enable the controller

In order to perform (3), we need to unquiesce the admin queue, however
we may have some admin commands that are already pending on the
quiesced admin_q and will immediate execute when we unquiesce it before
we execute (4). The host must not send admin commands to the controller
before enabling the controller.

To fix this, we have the fabric commands (admin connect and property
get/set, but not I/O queue connect) use a separate fabrics_q and make
sure to quiesce the admin_q before we disable the controller, and
unquiesce it only after we enable the controller.

This fixes the error prints from nvmet in a controller reset storm test:
kernel: nvmet: got cmd 6 while CC.EN == 0 on qid = 0
Which indicate that the host is sending an admin command when the
controller is not enabled.

Reviewed-by:  James Smart <james.smart@broadcom.com>
Reviewed-by: Christoph Hellwig <hch@lst.de>
Signed-off-by: Sagi Grimberg <sagi@grimberg.me>
2019-08-29 12:55:03 -07:00
..
admin-cmd.c nvmet: fix data units read and written counters in SMART log 2019-08-29 12:55:01 -07:00
configfs.c nvmet: print a hint while rejecting NSID 0 or 0xffffffff 2019-07-09 14:18:09 -07:00
core.c nvmet: introduce target-side trace 2019-06-21 11:15:46 +02:00
discovery.c nvmet: add transport discovery change op 2019-06-21 11:08:37 +02:00
fabrics-cmd.c nvme: introduce nvme_is_fabrics to check fabrics cmd 2019-06-21 11:08:38 +02:00
fc.c nvme: introduce nvme_is_fabrics to check fabrics cmd 2019-06-21 11:08:38 +02:00
fcloop.c nvme-fcloop: resolve warnings on RCU usage and sleep warnings 2019-07-09 13:16:09 -07:00
io-cmd-bdev.c nvmet: export I/O characteristics attributes in Identify 2019-07-09 14:15:37 -07:00
io-cmd-file.c nvmet-file: clamp-down file namespace lba_shift 2019-04-25 16:51:19 +02:00
Kconfig treewide: Add SPDX license identifier - Makefile/Kconfig 2019-05-21 10:50:46 +02:00
loop.c nvme: make fabrics command run on a separate request queue 2019-08-29 12:55:03 -07:00
Makefile nvmet: introduce target-side trace 2019-06-21 11:15:46 +02:00
nvmet.h nvmet: export I/O characteristics attributes in Identify 2019-07-09 14:15:37 -07:00
rdma.c nvmet: rename nvme_completion instances from rsp to cqe 2019-04-25 16:41:26 +02:00
tcp.c nvmet-tcp: Add TOS for tcp transport 2019-08-29 12:55:02 -07:00
trace.c nvmet: trace: parse Get LBA Status command in detail 2019-08-29 12:55:01 -07:00
trace.h nvmet: introduce target-side trace 2019-06-21 11:15:46 +02:00