On 22/09/25 02:37PM, Dave Jiang wrote:

+int nd_pmem_region_label_delete(struct nd_region *nd_region)
+{
+       struct nd_interleave_set *nd_set = nd_region->nd_set;
+       struct nd_label_ent *label_ent;
+       int ns_region_cnt = 0;
+       int i, rc;
+
+       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);
+
+               /* Find non cxl format supported ndr_mappings */
+               if (!ndd->cxl) {
+                       dev_info(&nd_region->dev, "Unsupported region label\n");
+                       return -EINVAL;
+               }
+
+               /* Find if any NS label using this region */
+               guard(mutex)(&nd_mapping->lock);
+               list_for_each_entry(label_ent, &nd_mapping->labels, list) {
+                       if (!label_ent->label)
+                               continue;
+
+                       /*
+                        * Check if any available NS labels has same
+                        * region_uuid in LSA
+                        */
+                       if (nsl_region_uuid_equal(label_ent->label,
+                                                 &nd_set->uuid))
+                               ns_region_cnt++;

Why not just return -EBUSY here immediately? It seems the code returns -EBUSY 
as long as there's 1 or more below.

+               }
+       }
+
+       if (ns_region_cnt) {
+               dev_dbg(&nd_region->dev, "Region/Namespace label in use\n");
+               return -EBUSY;
+       }
+
+       for (i = 0; i < nd_region->ndr_mappings; i++) {
+               struct nd_mapping *nd_mapping = &nd_region->mapping[i];
+
+               rc = del_labels(nd_mapping, &nd_set->uuid, RG_LABEL_TYPE);
+               if (rc)
+                       return rc;
+       }

Can this be folded into the for loop above or does it a full pass to check 
before starting the label deletion process?

DJ

Yes, if we use "return -EBUSY" in first loop itself then we can call 
del_labels()
I will fix this in next patch-set

Regards,
Neeraj


Reply via email to