|
Hannes Reinecke |
9de10a |
From: Keith Busch <kbusch@kernel.org>
|
|
Hannes Reinecke |
9de10a |
Date: Thu, 5 Sep 2019 08:09:33 -0600
|
|
Hannes Reinecke |
9de10a |
Subject: [PATCH] nvme: Restart request timers in resetting state
|
|
Hannes Reinecke |
9de10a |
Git-commit: 92b98e88d59ab17e65f261fbb5db272143ccf414
|
|
Hannes Reinecke |
9de10a |
Patch-mainline: v5.4-rc4
|
|
Hannes Reinecke |
9de10a |
References: bsc#1169045
|
|
Hannes Reinecke |
9de10a |
|
|
Hannes Reinecke |
9de10a |
A controller in the resetting state has not yet completed its recovery
|
|
Hannes Reinecke |
9de10a |
actions. The pci and fc transports were already handling this, so update
|
|
Hannes Reinecke |
9de10a |
the remaining transports to not attempt additional recovery in this
|
|
Hannes Reinecke |
9de10a |
state. Instead, just restart the request timer.
|
|
Hannes Reinecke |
9de10a |
|
|
Hannes Reinecke |
9de10a |
Tested-by: Edmund Nadolski <edmund.nadolski@intel.com>
|
|
Hannes Reinecke |
9de10a |
Reviewed-by: James Smart <james.smart@broadcom.com>
|
|
Hannes Reinecke |
9de10a |
Reviewed-by: Sagi Grimberg <sagi@grimberg.me>
|
|
Hannes Reinecke |
9de10a |
Reviewed-by: Christoph Hellwig <hch@lst.de>
|
|
Hannes Reinecke |
9de10a |
Signed-off-by: Keith Busch <kbusch@kernel.org>
|
|
Hannes Reinecke |
9de10a |
Acked-by: Hannes Reinecke <hare@suse.com>
|
|
Hannes Reinecke |
9de10a |
---
|
|
Hannes Reinecke |
9de10a |
drivers/nvme/host/rdma.c | 8 ++++++++
|
|
Hannes Reinecke |
9de10a |
drivers/nvme/host/tcp.c | 8 ++++++++
|
|
Hannes Reinecke |
9de10a |
2 files changed, 16 insertions(+)
|
|
Hannes Reinecke |
9de10a |
|
|
Hannes Reinecke |
9de10a |
diff --git a/drivers/nvme/host/rdma.c b/drivers/nvme/host/rdma.c
|
|
Hannes Reinecke |
9de10a |
index 4d280160dd3f..f19a28b4e997 100644
|
|
Hannes Reinecke |
9de10a |
--- a/drivers/nvme/host/rdma.c
|
|
Hannes Reinecke |
9de10a |
+++ b/drivers/nvme/host/rdma.c
|
|
Hannes Reinecke |
9de10a |
@@ -1701,6 +1701,14 @@ nvme_rdma_timeout(struct request *rq, bool reserved)
|
|
Hannes Reinecke |
9de10a |
dev_warn(ctrl->ctrl.device, "I/O %d QID %d timeout\n",
|
|
Hannes Reinecke |
9de10a |
rq->tag, nvme_rdma_queue_idx(queue));
|
|
Hannes Reinecke |
9de10a |
|
|
Hannes Reinecke |
9de10a |
+ /*
|
|
Hannes Reinecke |
9de10a |
+ * Restart the timer if a controller reset is already scheduled. Any
|
|
Hannes Reinecke |
9de10a |
+ * timed out commands would be handled before entering the connecting
|
|
Hannes Reinecke |
9de10a |
+ * state.
|
|
Hannes Reinecke |
9de10a |
+ */
|
|
Hannes Reinecke |
9de10a |
+ if (ctrl->ctrl.state == NVME_CTRL_RESETTING)
|
|
Hannes Reinecke |
9de10a |
+ return BLK_EH_RESET_TIMER;
|
|
Hannes Reinecke |
9de10a |
+
|
|
Hannes Reinecke |
9de10a |
if (ctrl->ctrl.state != NVME_CTRL_LIVE) {
|
|
Hannes Reinecke |
9de10a |
/*
|
|
Hannes Reinecke |
9de10a |
* Teardown immediately if controller times out while starting
|
|
Hannes Reinecke |
9de10a |
diff --git a/drivers/nvme/host/tcp.c b/drivers/nvme/host/tcp.c
|
|
Hannes Reinecke |
9de10a |
index 385a5212c10f..33de2fddfbb2 100644
|
|
Hannes Reinecke |
9de10a |
--- a/drivers/nvme/host/tcp.c
|
|
Hannes Reinecke |
9de10a |
+++ b/drivers/nvme/host/tcp.c
|
|
Hannes Reinecke |
9de10a |
@@ -2044,6 +2044,14 @@ nvme_tcp_timeout(struct request *rq, bool reserved)
|
|
Hannes Reinecke |
9de10a |
struct nvme_tcp_ctrl *ctrl = req->queue->ctrl;
|
|
Hannes Reinecke |
9de10a |
struct nvme_tcp_cmd_pdu *pdu = req->pdu;
|
|
Hannes Reinecke |
9de10a |
|
|
Hannes Reinecke |
9de10a |
+ /*
|
|
Hannes Reinecke |
9de10a |
+ * Restart the timer if a controller reset is already scheduled. Any
|
|
Hannes Reinecke |
9de10a |
+ * timed out commands would be handled before entering the connecting
|
|
Hannes Reinecke |
9de10a |
+ * state.
|
|
Hannes Reinecke |
9de10a |
+ */
|
|
Hannes Reinecke |
9de10a |
+ if (ctrl->ctrl.state == NVME_CTRL_RESETTING)
|
|
Hannes Reinecke |
9de10a |
+ return BLK_EH_RESET_TIMER;
|
|
Hannes Reinecke |
9de10a |
+
|
|
Hannes Reinecke |
9de10a |
dev_warn(ctrl->ctrl.device,
|
|
Hannes Reinecke |
9de10a |
"queue %d: timeout request %#x type %d\n",
|
|
Hannes Reinecke |
9de10a |
nvme_tcp_queue_id(req->queue), rq->tag, pdu->hdr.type);
|
|
Hannes Reinecke |
9de10a |
--
|
|
Hannes Reinecke |
9de10a |
2.16.4
|
|
Hannes Reinecke |
9de10a |
|