nvme-fc: clear q_live at beginning of association teardown
authorJames Smart <jsmart2021@gmail.com>
Tue, 11 May 2021 04:56:35 +0000 (21:56 -0700)
committerChristoph Hellwig <hch@lst.de>
Wed, 19 May 2021 06:40:24 +0000 (08:40 +0200)
commita7d139145a6640172516b193abf6d2398620aa14
tree94126636a129c21d4b2254f3dcd1a31f2dcb50f7
parenta0fdd1418007f83565d3f2e04b47923ba93a9b8c
nvme-fc: clear q_live at beginning of association teardown

The __nvmf_check_ready() routine used to bounce all filesystem io if the
controller state isn't LIVE.  However, a later patch changed the logic so
that it rejection ends up being based on the Q live check.  The FC
transport has a slightly different sequence from rdma and tcp for
shutting down queues/marking them non-live.  FC marks its queue non-live
after aborting all ios and waiting for their termination, leaving a
rather large window for filesystem io to continue to hit the transport.
Unfortunately this resulted in filesystem I/O or applications seeing I/O
errors.

Change the FC transport to mark the queues non-live at the first sign of
teardown for the association (when I/O is initially terminated).

Fixes: 73a5379937ec ("nvme-fabrics: allow to queue requests for live queues")
Signed-off-by: James Smart <jsmart2021@gmail.com>
Reviewed-by: Sagi Grimberg <sagi@grimberg.me>
Reviewed-by: Himanshu Madhani <himanshu.madhani@oracle.com>
Reviewed-by: Hannes Reinecke <hare@suse.de>
Signed-off-by: Christoph Hellwig <hch@lst.de>
drivers/nvme/host/fc.c