nvme: move the fabrics queue ready check routines to core
authorTao Chiu <taochiu@synology.com>
Mon, 26 Apr 2021 02:53:10 +0000 (10:53 +0800)
committerChristoph Hellwig <hch@lst.de>
Tue, 4 May 2021 07:35:49 +0000 (09:35 +0200)
commita97157440e1e69c35d7804d3b72da0c626ef28e6
treeb7dce4a25cb6a7388d3218a9c399d19fe97d4218
parent51ad06cd698cb9ff280a769ed8d57210a1d2266d
nvme: move the fabrics queue ready check routines to core

queue_rq() in pci only checks if the dispatched queue (nvmeq) is ready,
e.g. not being suspended. Since nvme_alloc_admin_tags() in reset flow
restarts the admin queue, users are able to submit admin commands to a
controller before reset_work() completes. Commands submitted under this
condition may interfere with commands that performs identify, IO queue
setup in reset_work(), and may result in a hang described in the
following patch.

As seen in the fabrics, user commands are prevented from being executed
under inproper controller states. We may reuse this logic to maintain a
clear admin queue during reset_work().

Signed-off-by: Tao Chiu <taochiu@synology.com>
Signed-off-by: Cody Wong <codywong@synology.com>
Reviewed-by: Leon Chien <leonchien@synology.com>
Reviewed-by: Keith Busch <kbusch@kernel.org>
Signed-off-by: Christoph Hellwig <hch@lst.de>
drivers/nvme/host/core.c
drivers/nvme/host/fabrics.c
drivers/nvme/host/fabrics.h
drivers/nvme/host/fc.c
drivers/nvme/host/nvme.h
drivers/nvme/host/rdma.c
drivers/nvme/host/tcp.c
drivers/nvme/target/loop.c