diff options
| author | Dan Williams <[email protected]> | 2017-06-04 01:59:15 +0000 |
|---|---|---|
| committer | Dan Williams <[email protected]> | 2017-06-15 21:31:39 +0000 |
| commit | c12c48ce869d72029d70666f615cbd8f67fc14e9 (patch) | |
| tree | c38e0587856fdaf94d0401cf644aae05c519804a /drivers/nvdimm/namespace_devs.c | |
| parent | libnvdimm, label: add v1.2 nvdimm label definitions (diff) | |
| download | kernel-c12c48ce869d72029d70666f615cbd8f67fc14e9.tar.gz kernel-c12c48ce869d72029d70666f615cbd8f67fc14e9.zip | |
libnvdimm, label: add v1.2 interleave-set-cookie algorithm
The interleave-set-cookie algorithm is extended to incorporate all the
same components that are used to generate an nvdimm unique-id. For
backwards compatibility we still maintain the old v1.1 definition.
Reported-by: Nicholas Moulin <[email protected]>
Reported-by: Kaushik Kanetkar <[email protected]>
Signed-off-by: Dan Williams <[email protected]>
Diffstat (limited to 'drivers/nvdimm/namespace_devs.c')
| -rw-r--r-- | drivers/nvdimm/namespace_devs.c | 9 |
1 files changed, 7 insertions, 2 deletions
diff --git a/drivers/nvdimm/namespace_devs.c b/drivers/nvdimm/namespace_devs.c index 2f9dfbd2dbec..51f304fe8a52 100644 --- a/drivers/nvdimm/namespace_devs.c +++ b/drivers/nvdimm/namespace_devs.c @@ -1698,10 +1698,11 @@ static int select_pmem_id(struct nd_region *nd_region, u8 *pmem_id) * @nd_label: target pmem namespace label to evaluate */ struct device *create_namespace_pmem(struct nd_region *nd_region, + struct nd_namespace_index *nsindex, struct nd_namespace_label *nd_label) { + u64 cookie = nd_region_interleave_set_cookie(nd_region, nsindex); u64 altcookie = nd_region_interleave_set_altcookie(nd_region); - u64 cookie = nd_region_interleave_set_cookie(nd_region); struct nd_label_ent *label_ent; struct nd_namespace_pmem *nspm; struct nd_mapping *nd_mapping; @@ -2108,7 +2109,11 @@ static struct device **scan_labels(struct nd_region *nd_region) goto err; devs[count++] = dev; } else { - dev = create_namespace_pmem(nd_region, nd_label); + struct nvdimm_drvdata *ndd = to_ndd(nd_mapping); + struct nd_namespace_index *nsindex; + + nsindex = to_namespace_index(ndd, ndd->ns_current); + dev = create_namespace_pmem(nd_region, nsindex, nd_label); if (IS_ERR(dev)) { switch (PTR_ERR(dev)) { case -EAGAIN: |
