[PATCH] nvme-core: check id->mc before setting NVME_NS_METADATA_SUPPORTED

Irvin Cote irvincoteg at gmail.com
Sat Jun 24 03:35:02 PDT 2023


The NVM Command set Identify Namespace Data Structure defines
the metadata capabilities field (mc) that determines support for
metadata. Check for the value of this field before enabling the
NVME_NS_METADATA_SUPPORTED in the nvme_ns data structure.

Signed-off-by: Irvin Cote <irvincoteg at gmail.com>
---
 drivers/nvme/host/core.c | 5 +++--
 1 file changed, 3 insertions(+), 2 deletions(-)

diff --git a/drivers/nvme/host/core.c b/drivers/nvme/host/core.c
index 3ec38e2b9173..465206b5cf6f 100644
--- a/drivers/nvme/host/core.c
+++ b/drivers/nvme/host/core.c
@@ -1841,7 +1841,8 @@ static void nvme_configure_metadata(struct nvme_ns *ns, struct nvme_id_ns *id)
 		 * Note, this check will need to be modified if any drivers
 		 * gain the ability to use other metadata formats.
 		 */
-		if (ctrl->max_integrity_segments && nvme_ns_has_pi(ns))
+		if (ctrl->max_integrity_segments && nvme_ns_has_pi(ns)
+				&& (id->mc & NVME_MC_EXTENDED_LBA))
 			ns->features |= NVME_NS_METADATA_SUPPORTED;
 	} else {
 		/*
@@ -1852,7 +1853,7 @@ static void nvme_configure_metadata(struct nvme_ns *ns, struct nvme_id_ns *id)
 		 */
 		if (id->flbas & NVME_NS_FLBAS_META_EXT)
 			ns->features |= NVME_NS_EXT_LBAS;
-		else
+		else if (id->mc & NVME_MC_METADATA_PTR)
 			ns->features |= NVME_NS_METADATA_SUPPORTED;
 	}
 }
-- 
2.40.1




More information about the Linux-nvme mailing list