Thread (34 messages) 34 messages, 7 authors, 2021-10-20

Re: [PATCH 2/7] nvme-fabrics: introduce nvmf_reconnect_or_remove API

From: Sagi Grimberg <sagi@grimberg.me>
Date: 2021-10-19 12:36:16

quoted hunk ↗ jump to hunk
This logic is duplicated today for RDMA and TCP controllers. Move it to
the fabrics driver and export it as a new API.

Also update the RDMA/TCP transport drivers to use this API and remove
the duplicated code.

Reviewed-by: Israel Rukshin <redacted>
Signed-off-by: Max Gurtovoy <mgurtovoy@nvidia.com>
---
  drivers/nvme/host/fabrics.c | 21 +++++++++++++++++++++
  drivers/nvme/host/fabrics.h |  1 +
  drivers/nvme/host/rdma.c    | 25 +++----------------------
  drivers/nvme/host/tcp.c     | 26 +++-----------------------
  4 files changed, 28 insertions(+), 45 deletions(-)
diff --git a/drivers/nvme/host/fabrics.c b/drivers/nvme/host/fabrics.c
index 668c6bb7a567..4a1ef67c6fb3 100644
--- a/drivers/nvme/host/fabrics.c
+++ b/drivers/nvme/host/fabrics.c
@@ -472,6 +472,27 @@ bool nvmf_should_reconnect(struct nvme_ctrl *ctrl)
  }
  EXPORT_SYMBOL_GPL(nvmf_should_reconnect);
  
+void nvmf_reconnect_or_remove(struct nvme_ctrl *ctrl)
+{
+	/* If we are resetting/deleting then do nothing */
+	if (ctrl->state != NVME_CTRL_CONNECTING) {
+		WARN_ON_ONCE(ctrl->state == NVME_CTRL_NEW ||
+			ctrl->state == NVME_CTRL_LIVE);
+		return;
+	}
+
+	if (nvmf_should_reconnect(ctrl)) {
+		dev_info(ctrl->device, "Reconnecting in %d seconds...\n",
+			ctrl->opts->reconnect_delay);
+		queue_delayed_work(nvme_wq, &ctrl->connect_work,
+				ctrl->opts->reconnect_delay * HZ);
+	} else {
+		dev_info(ctrl->device, "Removing controller...\n");
+		nvme_delete_ctrl(ctrl);
+	}
We need to look at fc here as it does this differently.
Can it converge somehow? if not we can add a callback for a driver
to override it.
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help