@@ -2449,6 +2449,29 @@ static struct device **create_namespaces(struct nd_region *nd_region)
return devs;
}
+static int __init_active_labels(struct nd_mapping *nd_mapping, int count)
+{
+ struct nvdimm_drvdata *ndd = nd_mapping->ndd;
+ struct nd_label_ent *label_ent;
+ int j;
+
+ for (j = 0; j < count; j++) {
+ struct nd_namespace_label *label;
+
+ label_ent = kzalloc(sizeof(*label_ent), GFP_KERNEL);
+ if (!label_ent)
+ break;
+ label = nd_label_active(ndd, j);
+ label_ent->label = label;
+
+ mutex_lock(&nd_mapping->lock);
+ list_add_tail(&label_ent->list, &nd_mapping->labels);
+ mutex_unlock(&nd_mapping->lock);
+ }
+
+ return j;
+}
+
static int init_active_labels(struct nd_region *nd_region)
{
int i, errno = -ENOMEM;
@@ -2457,8 +2480,7 @@ static int init_active_labels(struct nd_region *nd_region)
struct nd_mapping *nd_mapping = &nd_region->mapping[i];
struct nvdimm_drvdata *ndd = to_ndd(nd_mapping);
struct nvdimm *nvdimm = nd_mapping->nvdimm;
- struct nd_label_ent *label_ent;
- int count, j;
+ int count;
/*
* If the dimm is disabled then we may need to prevent
@@ -2485,21 +2507,8 @@ static int init_active_labels(struct nd_region *nd_region)
count = nd_label_active_count(ndd);
dev_dbg(ndd->dev, "count: %d\n", count);
- for (j = 0; j < count; j++) {
- struct nd_namespace_label *label;
-
- label_ent = kzalloc(sizeof(*label_ent), GFP_KERNEL);
- if (!label_ent)
- break;
- label = nd_label_active(ndd, j);
- label_ent->label = label;
-
- mutex_lock(&nd_mapping->lock);
- list_add_tail(&label_ent->list, &nd_mapping->labels);
- mutex_unlock(&nd_mapping->lock);
- }
- if (j < count)
+ if (__init_active_labels(nd_mapping, count) < count)
goto error;
}
This is a preparation for next patch, so that init_active_labels not too huge. Signed-off-by: Wei Yang <richardw.yang@linux.intel.com> --- drivers/nvdimm/namespace_devs.c | 41 ++++++++++++++++++++------------- 1 file changed, 25 insertions(+), 16 deletions(-)