Commit 9761b02d authored by Dan Williams's avatar Dan Williams
Browse files

libnvdimm/labels: Add isetcookie validation helper



In preparation to handle CXL labels with the same code that handles EFI
labels, add a specific interleave-set-cookie validation helper
rather than a getter since the CXL label type does not support this
concept. The answer for CXL labels will always be true.

Reviewed-by: default avatarJonathan Cameron <Jonathan.Cameron@huawei.com>
Link: https://lore.kernel.org/r/162982113550.1124374.206762177785773038.stgit@dwillia2-desk3.amr.corp.intel.com


Signed-off-by: default avatarDan Williams <dan.j.williams@intel.com>
parent b4366a82
Loading
Loading
Loading
Loading
+3 −5
Original line number Diff line number Diff line
@@ -1847,15 +1847,13 @@ static bool has_uuid_at_pos(struct nd_region *nd_region, u8 *uuid,
		list_for_each_entry(label_ent, &nd_mapping->labels, list) {
			struct nd_namespace_label *nd_label = label_ent->label;
			u16 position, nlabel;
			u64 isetcookie;

			if (!nd_label)
				continue;
			isetcookie = nsl_get_isetcookie(ndd, nd_label);
			position = nsl_get_position(ndd, nd_label);
			nlabel = nsl_get_nlabel(ndd, nd_label);

			if (isetcookie != cookie)
			if (!nsl_validate_isetcookie(ndd, nd_label, cookie))
				continue;

			if (memcmp(nd_label->uuid, uuid, NSLABEL_UUID_LEN) != 0)
@@ -1968,10 +1966,10 @@ static struct device *create_namespace_pmem(struct nd_region *nd_region,
		return ERR_PTR(-ENXIO);
	}

	if (nsl_get_isetcookie(ndd, nd_label) != cookie) {
	if (!nsl_validate_isetcookie(ndd, nd_label, cookie)) {
		dev_dbg(&nd_region->dev, "invalid cookie in label: %pUb\n",
				nd_label->uuid);
		if (nsl_get_isetcookie(ndd, nd_label) != altcookie)
		if (!nsl_validate_isetcookie(ndd, nd_label, altcookie))
			return ERR_PTR(-EAGAIN);

		dev_dbg(&nd_region->dev, "valid altcookie in label: %pUb\n",
+7 −0
Original line number Diff line number Diff line
@@ -83,6 +83,13 @@ static inline u64 nsl_get_isetcookie(struct nvdimm_drvdata *ndd,
	return __le64_to_cpu(nd_label->isetcookie);
}

static inline bool nsl_validate_isetcookie(struct nvdimm_drvdata *ndd,
					   struct nd_namespace_label *nd_label,
					   u64 cookie)
{
	return cookie == __le64_to_cpu(nd_label->isetcookie);
}

static inline u16 nsl_get_position(struct nvdimm_drvdata *ndd,
				   struct nd_namespace_label *nd_label)
{