Neeraj Kumar wrote: > In order to accommodate cxl lsa 2.1 format region label, renamed > nd_namespace_label to nd_lsa_label.
This does not really make it clear why a name change is required. Could you elaborate here? Ira > > No functional change introduced. > > Signed-off-by: Neeraj Kumar <s.nee...@samsung.com> > --- > drivers/nvdimm/label.c | 79 ++++++++++++++++++--------------- > drivers/nvdimm/label.h | 12 ++++- > drivers/nvdimm/namespace_devs.c | 74 +++++++++++++++--------------- > drivers/nvdimm/nd.h | 2 +- > 4 files changed, 92 insertions(+), 75 deletions(-) > > diff --git a/drivers/nvdimm/label.c b/drivers/nvdimm/label.c > index 48b5ba90216d..30bccad98939 100644 > --- a/drivers/nvdimm/label.c > +++ b/drivers/nvdimm/label.c > @@ -271,7 +271,7 @@ static void nd_label_copy(struct nvdimm_drvdata *ndd, > memcpy(dst, src, sizeof_namespace_index(ndd)); > } > > -static struct nd_namespace_label *nd_label_base(struct nvdimm_drvdata *ndd) > +static struct nd_lsa_label *nd_label_base(struct nvdimm_drvdata *ndd) > { > void *base = to_namespace_index(ndd, 0); > > @@ -279,7 +279,7 @@ static struct nd_namespace_label *nd_label_base(struct > nvdimm_drvdata *ndd) > } > > static int to_slot(struct nvdimm_drvdata *ndd, > - struct nd_namespace_label *nd_label) > + struct nd_lsa_label *nd_label) > { > unsigned long label, base; > > @@ -289,14 +289,14 @@ static int to_slot(struct nvdimm_drvdata *ndd, > return (label - base) / sizeof_namespace_label(ndd); > } > > -static struct nd_namespace_label *to_label(struct nvdimm_drvdata *ndd, int > slot) > +static struct nd_lsa_label *to_label(struct nvdimm_drvdata *ndd, int slot) > { > unsigned long label, base; > > base = (unsigned long) nd_label_base(ndd); > label = base + sizeof_namespace_label(ndd) * slot; > > - return (struct nd_namespace_label *) label; > + return (struct nd_lsa_label *) label; > } > > #define for_each_clear_bit_le(bit, addr, size) \ > @@ -382,14 +382,14 @@ static void nsl_calculate_checksum(struct > nvdimm_drvdata *ndd, > } > > static bool slot_valid(struct nvdimm_drvdata *ndd, > - struct nd_namespace_label *nd_label, u32 slot) > + struct nd_lsa_label *nd_label, u32 slot) > { > bool valid; > > /* check that we are written where we expect to be written */ > - if (slot != nsl_get_slot(ndd, nd_label)) > + if (slot != nsl_get_slot(ndd, &nd_label->ns_label)) > return false; > - valid = nsl_validate_checksum(ndd, nd_label); > + valid = nsl_validate_checksum(ndd, &nd_label->ns_label); > if (!valid) > dev_dbg(ndd->dev, "fail checksum. slot: %d\n", slot); > return valid; > @@ -405,7 +405,8 @@ int nd_label_reserve_dpa(struct nvdimm_drvdata *ndd) > return 0; /* no label, nothing to reserve */ > > for_each_clear_bit_le(slot, free, nslot) { > - struct nd_namespace_label *nd_label; > + struct nd_lsa_label *nd_label; > + struct nd_namespace_label *ns_label; > struct nd_region *nd_region = NULL; > struct nd_label_id label_id; > struct resource *res; > @@ -413,16 +414,17 @@ int nd_label_reserve_dpa(struct nvdimm_drvdata *ndd) > u32 flags; > > nd_label = to_label(ndd, slot); > + ns_label = &nd_label->ns_label; > > if (!slot_valid(ndd, nd_label, slot)) > continue; > > - nsl_get_uuid(ndd, nd_label, &label_uuid); > - flags = nsl_get_flags(ndd, nd_label); > + nsl_get_uuid(ndd, ns_label, &label_uuid); > + flags = nsl_get_flags(ndd, ns_label); > nd_label_gen_id(&label_id, &label_uuid, flags); > res = nvdimm_allocate_dpa(ndd, &label_id, > - nsl_get_dpa(ndd, nd_label), > - nsl_get_rawsize(ndd, nd_label)); > + nsl_get_dpa(ndd, ns_label), > + nsl_get_rawsize(ndd, ns_label)); > nd_dbg_dpa(nd_region, ndd, res, "reserve\n"); > if (!res) > return -EBUSY; > @@ -564,14 +566,14 @@ int nd_label_active_count(struct nvdimm_drvdata *ndd) > return 0; > > for_each_clear_bit_le(slot, free, nslot) { > - struct nd_namespace_label *nd_label; > + struct nd_lsa_label *nd_label; > > nd_label = to_label(ndd, slot); > > if (!slot_valid(ndd, nd_label, slot)) { > - u32 label_slot = nsl_get_slot(ndd, nd_label); > - u64 size = nsl_get_rawsize(ndd, nd_label); > - u64 dpa = nsl_get_dpa(ndd, nd_label); > + u32 label_slot = nsl_get_slot(ndd, &nd_label->ns_label); > + u64 size = nsl_get_rawsize(ndd, &nd_label->ns_label); > + u64 dpa = nsl_get_dpa(ndd, &nd_label->ns_label); > > dev_dbg(ndd->dev, > "slot%d invalid slot: %d dpa: %llx size: > %llx\n", > @@ -583,7 +585,7 @@ int nd_label_active_count(struct nvdimm_drvdata *ndd) > return count; > } > > -struct nd_namespace_label *nd_label_active(struct nvdimm_drvdata *ndd, int n) > +struct nd_lsa_label *nd_label_active(struct nvdimm_drvdata *ndd, int n) > { > struct nd_namespace_index *nsindex; > unsigned long *free; > @@ -593,7 +595,7 @@ struct nd_namespace_label *nd_label_active(struct > nvdimm_drvdata *ndd, int n) > return NULL; > > for_each_clear_bit_le(slot, free, nslot) { > - struct nd_namespace_label *nd_label; > + struct nd_lsa_label *nd_label; > > nd_label = to_label(ndd, slot); > if (!slot_valid(ndd, nd_label, slot)) > @@ -731,7 +733,7 @@ static int nd_label_write_index(struct nvdimm_drvdata > *ndd, int index, u32 seq, > } > > static unsigned long nd_label_offset(struct nvdimm_drvdata *ndd, > - struct nd_namespace_label *nd_label) > + struct nd_lsa_label *nd_label) > { > return (unsigned long) nd_label > - (unsigned long) to_namespace_index(ndd, 0); > @@ -885,7 +887,8 @@ static int __pmem_label_update(struct nd_region > *nd_region, > struct nd_namespace_common *ndns = &nspm->nsio.common; > struct nd_interleave_set *nd_set = nd_region->nd_set; > struct nvdimm_drvdata *ndd = to_ndd(nd_mapping); > - struct nd_namespace_label *nd_label; > + struct nd_lsa_label *nd_label; > + struct nd_namespace_label *ns_label; > struct nd_namespace_index *nsindex; > struct nd_label_ent *label_ent; > struct nd_label_id label_id; > @@ -918,20 +921,22 @@ static int __pmem_label_update(struct nd_region > *nd_region, > > nd_label = to_label(ndd, slot); > memset(nd_label, 0, sizeof_namespace_label(ndd)); > - nsl_set_uuid(ndd, nd_label, nspm->uuid); > - nsl_set_name(ndd, nd_label, nspm->alt_name); > - nsl_set_flags(ndd, nd_label, flags); > - nsl_set_nlabel(ndd, nd_label, nd_region->ndr_mappings); > - nsl_set_nrange(ndd, nd_label, 1); > - nsl_set_position(ndd, nd_label, pos); > - nsl_set_isetcookie(ndd, nd_label, cookie); > - nsl_set_rawsize(ndd, nd_label, resource_size(res)); > - nsl_set_lbasize(ndd, nd_label, nspm->lbasize); > - nsl_set_dpa(ndd, nd_label, res->start); > - nsl_set_slot(ndd, nd_label, slot); > - nsl_set_type_guid(ndd, nd_label, &nd_set->type_guid); > - nsl_set_claim_class(ndd, nd_label, ndns->claim_class); > - nsl_calculate_checksum(ndd, nd_label); > + > + ns_label = &nd_label->ns_label; > + nsl_set_uuid(ndd, ns_label, nspm->uuid); > + nsl_set_name(ndd, ns_label, nspm->alt_name); > + nsl_set_flags(ndd, ns_label, flags); > + nsl_set_nlabel(ndd, ns_label, nd_region->ndr_mappings); > + nsl_set_nrange(ndd, ns_label, 1); > + nsl_set_position(ndd, ns_label, pos); > + nsl_set_isetcookie(ndd, ns_label, cookie); > + nsl_set_rawsize(ndd, ns_label, resource_size(res)); > + nsl_set_lbasize(ndd, ns_label, nspm->lbasize); > + nsl_set_dpa(ndd, ns_label, res->start); > + nsl_set_slot(ndd, ns_label, slot); > + nsl_set_type_guid(ndd, ns_label, &nd_set->type_guid); > + nsl_set_claim_class(ndd, ns_label, ndns->claim_class); > + nsl_calculate_checksum(ndd, ns_label); > nd_dbg_dpa(nd_region, ndd, res, "\n"); > > /* update label */ > @@ -947,7 +952,7 @@ static int __pmem_label_update(struct nd_region > *nd_region, > if (!label_ent->label) > continue; > if (test_and_clear_bit(ND_LABEL_REAP, &label_ent->flags) || > - nsl_uuid_equal(ndd, label_ent->label, nspm->uuid)) > + nsl_uuid_equal(ndd, &label_ent->label->ns_label, > nspm->uuid)) > reap_victim(nd_mapping, label_ent); > } > > @@ -1035,12 +1040,12 @@ static int del_labels(struct nd_mapping *nd_mapping, > uuid_t *uuid) > > mutex_lock(&nd_mapping->lock); > list_for_each_entry_safe(label_ent, e, &nd_mapping->labels, list) { > - struct nd_namespace_label *nd_label = label_ent->label; > + struct nd_lsa_label *nd_label = label_ent->label; > > if (!nd_label) > continue; > active++; > - if (!nsl_uuid_equal(ndd, nd_label, uuid)) > + if (!nsl_uuid_equal(ndd, &nd_label->ns_label, uuid)) > continue; > active--; > slot = to_slot(ndd, nd_label); > diff --git a/drivers/nvdimm/label.h b/drivers/nvdimm/label.h > index 0650fb4b9821..4883b3a1320f 100644 > --- a/drivers/nvdimm/label.h > +++ b/drivers/nvdimm/label.h > @@ -183,6 +183,16 @@ struct nd_namespace_label { > }; > }; > > +/* > + * LSA 2.1 format introduces region label, which can also reside > + * into LSA along with only namespace label as per v1.1 and v1.2 > + */ > +struct nd_lsa_label { > + union { > + struct nd_namespace_label ns_label; > + }; > +}; > + > #define NVDIMM_BTT_GUID "8aed63a2-29a2-4c66-8b12-f05d15d3922a" > #define NVDIMM_BTT2_GUID "18633bfc-1735-4217-8ac9-17239282d3f8" > #define NVDIMM_PFN_GUID "266400ba-fb9f-4677-bcb0-968f11d0d225" > @@ -215,7 +225,7 @@ struct nvdimm_drvdata; > int nd_label_data_init(struct nvdimm_drvdata *ndd); > size_t sizeof_namespace_index(struct nvdimm_drvdata *ndd); > int nd_label_active_count(struct nvdimm_drvdata *ndd); > -struct nd_namespace_label *nd_label_active(struct nvdimm_drvdata *ndd, int > n); > +struct nd_lsa_label *nd_label_active(struct nvdimm_drvdata *ndd, int n); > u32 nd_label_alloc_slot(struct nvdimm_drvdata *ndd); > bool nd_label_free_slot(struct nvdimm_drvdata *ndd, u32 slot); > u32 nd_label_nfree(struct nvdimm_drvdata *ndd); > diff --git a/drivers/nvdimm/namespace_devs.c b/drivers/nvdimm/namespace_devs.c > index 55cfbf1e0a95..f180f0068c15 100644 > --- a/drivers/nvdimm/namespace_devs.c > +++ b/drivers/nvdimm/namespace_devs.c > @@ -1009,15 +1009,15 @@ static int namespace_update_uuid(struct nd_region > *nd_region, > > mutex_lock(&nd_mapping->lock); > list_for_each_entry(label_ent, &nd_mapping->labels, list) { > - struct nd_namespace_label *nd_label = label_ent->label; > + struct nd_lsa_label *nd_label = label_ent->label; > struct nd_label_id label_id; > uuid_t uuid; > > if (!nd_label) > continue; > - nsl_get_uuid(ndd, nd_label, &uuid); > + nsl_get_uuid(ndd, &nd_label->ns_label, &uuid); > nd_label_gen_id(&label_id, &uuid, > - nsl_get_flags(ndd, nd_label)); > + nsl_get_flags(ndd, > &nd_label->ns_label)); > if (strcmp(old_label_id.id, label_id.id) == 0) > set_bit(ND_LABEL_REAP, &label_ent->flags); > } > @@ -1562,7 +1562,7 @@ static struct device **create_namespace_io(struct > nd_region *nd_region) > static bool has_uuid_at_pos(struct nd_region *nd_region, const uuid_t *uuid, > u64 cookie, u16 pos) > { > - struct nd_namespace_label *found = NULL; > + struct nd_lsa_label *found = NULL; > int i; > > for (i = 0; i < nd_region->ndr_mappings; i++) { > @@ -1573,20 +1573,21 @@ static bool has_uuid_at_pos(struct nd_region > *nd_region, const uuid_t *uuid, > bool found_uuid = false; > > list_for_each_entry(label_ent, &nd_mapping->labels, list) { > - struct nd_namespace_label *nd_label = label_ent->label; > + struct nd_lsa_label *nd_label = label_ent->label; > u16 position; > > if (!nd_label) > continue; > - position = nsl_get_position(ndd, nd_label); > + position = nsl_get_position(ndd, &nd_label->ns_label); > > - if (!nsl_validate_isetcookie(ndd, nd_label, cookie)) > + if (!nsl_validate_isetcookie(ndd, &nd_label->ns_label, > + cookie)) > continue; > > - if (!nsl_uuid_equal(ndd, nd_label, uuid)) > + if (!nsl_uuid_equal(ndd, &nd_label->ns_label, uuid)) > continue; > > - if (!nsl_validate_type_guid(ndd, nd_label, > + if (!nsl_validate_type_guid(ndd, &nd_label->ns_label, > &nd_set->type_guid)) > continue; > > @@ -1595,7 +1596,8 @@ static bool has_uuid_at_pos(struct nd_region > *nd_region, const uuid_t *uuid, > return false; > } > found_uuid = true; > - if (!nsl_validate_nlabel(nd_region, ndd, nd_label)) > + if (!nsl_validate_nlabel(nd_region, > + ndd, &nd_label->ns_label)) > continue; > if (position != pos) > continue; > @@ -1615,7 +1617,7 @@ static int select_pmem_id(struct nd_region *nd_region, > const uuid_t *pmem_id) > for (i = 0; i < nd_region->ndr_mappings; i++) { > struct nd_mapping *nd_mapping = &nd_region->mapping[i]; > struct nvdimm_drvdata *ndd = to_ndd(nd_mapping); > - struct nd_namespace_label *nd_label = NULL; > + struct nd_lsa_label *nd_label = NULL; > u64 hw_start, hw_end, pmem_start, pmem_end; > struct nd_label_ent *label_ent; > > @@ -1624,7 +1626,7 @@ static int select_pmem_id(struct nd_region *nd_region, > const uuid_t *pmem_id) > nd_label = label_ent->label; > if (!nd_label) > continue; > - if (nsl_uuid_equal(ndd, nd_label, pmem_id)) > + if (nsl_uuid_equal(ndd, &nd_label->ns_label, pmem_id)) > break; > nd_label = NULL; > } > @@ -1640,15 +1642,15 @@ static int select_pmem_id(struct nd_region > *nd_region, const uuid_t *pmem_id) > */ > hw_start = nd_mapping->start; > hw_end = hw_start + nd_mapping->size; > - pmem_start = nsl_get_dpa(ndd, nd_label); > - pmem_end = pmem_start + nsl_get_rawsize(ndd, nd_label); > + pmem_start = nsl_get_dpa(ndd, &nd_label->ns_label); > + pmem_end = pmem_start + nsl_get_rawsize(ndd, > &nd_label->ns_label); > if (pmem_start >= hw_start && pmem_start < hw_end > && pmem_end <= hw_end && pmem_end > hw_start) > /* pass */; > else { > dev_dbg(&nd_region->dev, "%s invalid label for %pUb\n", > dev_name(ndd->dev), > - nsl_uuid_raw(ndd, nd_label)); > + nsl_uuid_raw(ndd, &nd_label->ns_label)); > return -EINVAL; > } > > @@ -1668,7 +1670,7 @@ static int select_pmem_id(struct nd_region *nd_region, > const uuid_t *pmem_id) > */ > static struct device *create_namespace_pmem(struct nd_region *nd_region, > struct nd_mapping *nd_mapping, > - struct nd_namespace_label *nd_label) > + struct nd_lsa_label *nd_label) > { > struct nvdimm_drvdata *ndd = to_ndd(nd_mapping); > struct nd_namespace_index *nsindex = > @@ -1689,14 +1691,14 @@ static struct device *create_namespace_pmem(struct > nd_region *nd_region, > return ERR_PTR(-ENXIO); > } > > - if (!nsl_validate_isetcookie(ndd, nd_label, cookie)) { > + if (!nsl_validate_isetcookie(ndd, &nd_label->ns_label, cookie)) { > dev_dbg(&nd_region->dev, "invalid cookie in label: %pUb\n", > - nsl_uuid_raw(ndd, nd_label)); > - if (!nsl_validate_isetcookie(ndd, nd_label, altcookie)) > + nsl_uuid_raw(ndd, &nd_label->ns_label)); > + if (!nsl_validate_isetcookie(ndd, &nd_label->ns_label, > altcookie)) > return ERR_PTR(-EAGAIN); > > dev_dbg(&nd_region->dev, "valid altcookie in label: %pUb\n", > - nsl_uuid_raw(ndd, nd_label)); > + nsl_uuid_raw(ndd, &nd_label->ns_label)); > } > > nspm = kzalloc(sizeof(*nspm), GFP_KERNEL); > @@ -1712,7 +1714,7 @@ static struct device *create_namespace_pmem(struct > nd_region *nd_region, > res->flags = IORESOURCE_MEM; > > for (i = 0; i < nd_region->ndr_mappings; i++) { > - nsl_get_uuid(ndd, nd_label, &uuid); > + nsl_get_uuid(ndd, &nd_label->ns_label, &uuid); > if (has_uuid_at_pos(nd_region, &uuid, cookie, i)) > continue; > if (has_uuid_at_pos(nd_region, &uuid, altcookie, i)) > @@ -1729,7 +1731,7 @@ static struct device *create_namespace_pmem(struct > nd_region *nd_region, > * find a dimm with two instances of the same uuid. > */ > dev_err(&nd_region->dev, "%s missing label for %pUb\n", > - nvdimm_name(nvdimm), nsl_uuid_raw(ndd, nd_label)); > + nvdimm_name(nvdimm), nsl_uuid_raw(ndd, > &nd_label->ns_label)); > rc = -EINVAL; > goto err; > } > @@ -1739,14 +1741,14 @@ static struct device *create_namespace_pmem(struct > nd_region *nd_region, > * that position at labels[0], and NULL at labels[1]. In the process, > * check that the namespace aligns with interleave-set. > */ > - nsl_get_uuid(ndd, nd_label, &uuid); > + nsl_get_uuid(ndd, &nd_label->ns_label, &uuid); > rc = select_pmem_id(nd_region, &uuid); > if (rc) > goto err; > > /* Calculate total size and populate namespace properties from label0 */ > for (i = 0; i < nd_region->ndr_mappings; i++) { > - struct nd_namespace_label *label0; > + struct nd_lsa_label *label0; > struct nvdimm_drvdata *ndd; > > nd_mapping = &nd_region->mapping[i]; > @@ -1760,17 +1762,17 @@ static struct device *create_namespace_pmem(struct > nd_region *nd_region, > } > > ndd = to_ndd(nd_mapping); > - size += nsl_get_rawsize(ndd, label0); > - if (nsl_get_position(ndd, label0) != 0) > + size += nsl_get_rawsize(ndd, &label0->ns_label); > + if (nsl_get_position(ndd, &label0->ns_label) != 0) > continue; > WARN_ON(nspm->alt_name || nspm->uuid); > - nspm->alt_name = kmemdup(nsl_ref_name(ndd, label0), > + nspm->alt_name = kmemdup(nsl_ref_name(ndd, &label0->ns_label), > NSLABEL_NAME_LEN, GFP_KERNEL); > - nsl_get_uuid(ndd, label0, &uuid); > + nsl_get_uuid(ndd, &label0->ns_label, &uuid); > nspm->uuid = kmemdup(&uuid, sizeof(uuid_t), GFP_KERNEL); > - nspm->lbasize = nsl_get_lbasize(ndd, label0); > + nspm->lbasize = nsl_get_lbasize(ndd, &label0->ns_label); > nspm->nsio.common.claim_class = > - nsl_get_claim_class(ndd, label0); > + nsl_get_claim_class(ndd, &label0->ns_label); > } > > if (!nspm->alt_name || !nspm->uuid) { > @@ -1887,7 +1889,7 @@ void nd_region_create_btt_seed(struct nd_region > *nd_region) > } > > static int add_namespace_resource(struct nd_region *nd_region, > - struct nd_namespace_label *nd_label, struct device **devs, > + struct nd_lsa_label *nd_label, struct device **devs, > int count) > { > struct nd_mapping *nd_mapping = &nd_region->mapping[0]; > @@ -1902,7 +1904,7 @@ static int add_namespace_resource(struct nd_region > *nd_region, > continue; > } > > - if (!nsl_uuid_equal(ndd, nd_label, uuid)) > + if (!nsl_uuid_equal(ndd, &nd_label->ns_label, uuid)) > continue; > dev_err(&nd_region->dev, > "error: conflicting extents for uuid: %pUb\n", uuid); > @@ -1943,15 +1945,15 @@ static struct device **scan_labels(struct nd_region > *nd_region) > > /* "safe" because create_namespace_pmem() might list_move() label_ent */ > list_for_each_entry_safe(label_ent, e, &nd_mapping->labels, list) { > - struct nd_namespace_label *nd_label = label_ent->label; > + struct nd_lsa_label *nd_label = label_ent->label; > struct device **__devs; > > if (!nd_label) > continue; > > /* skip labels that describe extents outside of the region */ > - if (nsl_get_dpa(ndd, nd_label) < nd_mapping->start || > - nsl_get_dpa(ndd, nd_label) > map_end) > + if (nsl_get_dpa(ndd, &nd_label->ns_label) < nd_mapping->start || > + nsl_get_dpa(ndd, &nd_label->ns_label) > map_end) > continue; > > i = add_namespace_resource(nd_region, nd_label, devs, count); > @@ -2122,7 +2124,7 @@ static int init_active_labels(struct nd_region > *nd_region) > if (!count) > continue; > for (j = 0; j < count; j++) { > - struct nd_namespace_label *label; > + struct nd_lsa_label *label; > > label_ent = kzalloc(sizeof(*label_ent), GFP_KERNEL); > if (!label_ent) > diff --git a/drivers/nvdimm/nd.h b/drivers/nvdimm/nd.h > index 304f0e9904f1..2ead96ac598b 100644 > --- a/drivers/nvdimm/nd.h > +++ b/drivers/nvdimm/nd.h > @@ -376,7 +376,7 @@ enum nd_label_flags { > struct nd_label_ent { > struct list_head list; > unsigned long flags; > - struct nd_namespace_label *label; > + struct nd_lsa_label *label; > }; > > enum nd_mapping_lock_class { > -- > 2.34.1 > >