Hannes Reinecke c2c2c7
From: James Smart <jsmart2021@gmail.com>
Hannes Reinecke c2c2c7
Date: Thu, 21 Nov 2019 09:58:10 -0800
Hannes Reinecke c2c2c7
Subject: [PATCH] nvme: add error message on mismatching controller ids
Hannes Reinecke c2c2c7
Git-commit: a8157ff3607eccb21efd4eb2ca46ff0cc488d12d
Hannes Reinecke c2c2c7
Patch-mainline: v5.5-rc2
Hannes Reinecke c2c2c7
References: bsc#1169045
Hannes Reinecke c2c2c7
Hannes Reinecke c2c2c7
We've seen a few devices that return different controller id's to
Hannes Reinecke c2c2c7
the Fabric Connect command vs the Identify(controller) command. It's
Hannes Reinecke c2c2c7
currently hard to identify this failure by existing error messages. It
Hannes Reinecke c2c2c7
comes across as a (re)connect attempt in the transport that fails with
Hannes Reinecke c2c2c7
a -22 (-EINVAL) status. The issue is compounded by older kernels not
Hannes Reinecke c2c2c7
having the controller id check or had the identify command overwrite the
Hannes Reinecke c2c2c7
fabrics controller id value before it checked. Both resulted in cases
Hannes Reinecke c2c2c7
where the devices appeared fine until more recent kernels.
Hannes Reinecke c2c2c7
Hannes Reinecke c2c2c7
Clarify the reject by adding an error message on controller id mismatches.
Hannes Reinecke c2c2c7
Hannes Reinecke c2c2c7
Reviewed-by: Christoph Hellwig <hch@lst.de>
Hannes Reinecke c2c2c7
Reviewed-by: Hannes Reinecke <hare@suse.de>
Hannes Reinecke c2c2c7
Reviewed-by: Ewan D. Milne <emilne@redhat.com>
Hannes Reinecke c2c2c7
Signed-off-by: James Smart <jsmart2021@gmail.com>
Hannes Reinecke c2c2c7
Signed-off-by: Keith Busch <kbusch@kernel.org>
Hannes Reinecke c2c2c7
Acked-by: Hannes Reinecke <hare@suse.com>
Hannes Reinecke c2c2c7
---
Hannes Reinecke c2c2c7
 drivers/nvme/host/core.c | 4 ++++
Hannes Reinecke c2c2c7
 1 file changed, 4 insertions(+)
Hannes Reinecke c2c2c7
Hannes Reinecke c2c2c7
diff --git a/drivers/nvme/host/core.c b/drivers/nvme/host/core.c
Hannes Reinecke c2c2c7
index 8e8527408db3..e6ee34376c5e 100644
Hannes Reinecke c2c2c7
--- a/drivers/nvme/host/core.c
Hannes Reinecke c2c2c7
+++ b/drivers/nvme/host/core.c
Hannes Reinecke c2c2c7
@@ -2862,6 +2862,10 @@ int nvme_init_identify(struct nvme_ctrl *ctrl)
Hannes Reinecke c2c2c7
 		 * admin connect
Hannes Reinecke c2c2c7
 		 */
Hannes Reinecke c2c2c7
 		if (ctrl->cntlid != le16_to_cpu(id->cntlid)) {
Hannes Reinecke c2c2c7
+			dev_err(ctrl->device,
Hannes Reinecke c2c2c7
+				"Mismatching cntlid: Connect %u vs Identify "
Hannes Reinecke c2c2c7
+				"%u, rejecting\n",
Hannes Reinecke c2c2c7
+				ctrl->cntlid, le16_to_cpu(id->cntlid));
Hannes Reinecke c2c2c7
 			ret = -EINVAL;
Hannes Reinecke c2c2c7
 			goto out_free;
Hannes Reinecke c2c2c7
 		}
Hannes Reinecke c2c2c7
-- 
Hannes Reinecke c2c2c7
2.16.4
Hannes Reinecke c2c2c7