mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-11-11 12:28:41 +08:00
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: Jonathan Cameron <Jonathan.Cameron@huawei.com> Link: https://lore.kernel.org/r/162982113550.1124374.206762177785773038.stgit@dwillia2-desk3.amr.corp.intel.com Signed-off-by: Dan Williams <dan.j.williams@intel.com>
This commit is contained in:
parent
b4366a827f
commit
9761b02d40
@ -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",
|
||||
|
@ -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)
|
||||
{
|
||||
|
Loading…
Reference in New Issue
Block a user