|
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 |
|