]> git.kernelconcepts.de Git - karo-tx-linux.git/commitdiff
mtd: ofpart: assign return argument exactly once
authorBrian Norris <computersforpeace@gmail.com>
Fri, 4 Dec 2015 23:25:13 +0000 (15:25 -0800)
committerBrian Norris <computersforpeace@gmail.com>
Wed, 9 Dec 2015 18:21:52 +0000 (10:21 -0800)
It's easier to refactor these parsers if the return value gets assigned
only once, just like every other MTD partition parser.

This prepares for making the second arg to the parse_fn() const. This is
OK if we construct the partitions completely first, and assign them to
the return pointer only after we're done modifying them.

Signed-off-by: Brian Norris <computersforpeace@gmail.com>
Reviewed-by: Boris Brezillon <boris.brezillon@free-electrons.com>
drivers/mtd/ofpart.c

index 904645143397ac3ca8e203d7b438ba6fa4fa758f..c7df2f1dd6b8d704e26176401c37342509bc5940 100644 (file)
@@ -29,6 +29,7 @@ static int parse_ofpart_partitions(struct mtd_info *master,
                                   struct mtd_partition **pparts,
                                   struct mtd_part_parser_data *data)
 {
+       struct mtd_partition *parts;
        struct device_node *mtd_node;
        struct device_node *ofpart_node;
        const char *partname;
@@ -70,8 +71,8 @@ static int parse_ofpart_partitions(struct mtd_info *master,
        if (nr_parts == 0)
                return 0;
 
-       *pparts = kzalloc(nr_parts * sizeof(**pparts), GFP_KERNEL);
-       if (!*pparts)
+       parts = kzalloc(nr_parts * sizeof(*parts), GFP_KERNEL);
+       if (!parts)
                return -ENOMEM;
 
        i = 0;
@@ -105,19 +106,19 @@ static int parse_ofpart_partitions(struct mtd_info *master,
                        goto ofpart_fail;
                }
 
-               (*pparts)[i].offset = of_read_number(reg, a_cells);
-               (*pparts)[i].size = of_read_number(reg + a_cells, s_cells);
+               parts[i].offset = of_read_number(reg, a_cells);
+               parts[i].size = of_read_number(reg + a_cells, s_cells);
 
                partname = of_get_property(pp, "label", &len);
                if (!partname)
                        partname = of_get_property(pp, "name", &len);
-               (*pparts)[i].name = partname;
+               parts[i].name = partname;
 
                if (of_get_property(pp, "read-only", &len))
-                       (*pparts)[i].mask_flags |= MTD_WRITEABLE;
+                       parts[i].mask_flags |= MTD_WRITEABLE;
 
                if (of_get_property(pp, "lock", &len))
-                       (*pparts)[i].mask_flags |= MTD_POWERUP_LOCK;
+                       parts[i].mask_flags |= MTD_POWERUP_LOCK;
 
                i++;
        }
@@ -125,6 +126,7 @@ static int parse_ofpart_partitions(struct mtd_info *master,
        if (!nr_parts)
                goto ofpart_none;
 
+       *pparts = parts;
        return nr_parts;
 
 ofpart_fail:
@@ -133,8 +135,7 @@ ofpart_fail:
        ret = -EINVAL;
 ofpart_none:
        of_node_put(pp);
-       kfree(*pparts);
-       *pparts = NULL;
+       kfree(parts);
        return ret;
 }
 
@@ -147,6 +148,7 @@ static int parse_ofoldpart_partitions(struct mtd_info *master,
                                      struct mtd_partition **pparts,
                                      struct mtd_part_parser_data *data)
 {
+       struct mtd_partition *parts;
        struct device_node *dp;
        int i, plen, nr_parts;
        const struct {
@@ -168,32 +170,33 @@ static int parse_ofoldpart_partitions(struct mtd_info *master,
 
        nr_parts = plen / sizeof(part[0]);
 
-       *pparts = kzalloc(nr_parts * sizeof(*(*pparts)), GFP_KERNEL);
-       if (!*pparts)
+       parts = kzalloc(nr_parts * sizeof(*parts), GFP_KERNEL);
+       if (!parts)
                return -ENOMEM;
 
        names = of_get_property(dp, "partition-names", &plen);
 
        for (i = 0; i < nr_parts; i++) {
-               (*pparts)[i].offset = be32_to_cpu(part->offset);
-               (*pparts)[i].size   = be32_to_cpu(part->len) & ~1;
+               parts[i].offset = be32_to_cpu(part->offset);
+               parts[i].size   = be32_to_cpu(part->len) & ~1;
                /* bit 0 set signifies read only partition */
                if (be32_to_cpu(part->len) & 1)
-                       (*pparts)[i].mask_flags = MTD_WRITEABLE;
+                       parts[i].mask_flags = MTD_WRITEABLE;
 
                if (names && (plen > 0)) {
                        int len = strlen(names) + 1;
 
-                       (*pparts)[i].name = names;
+                       parts[i].name = names;
                        plen -= len;
                        names += len;
                } else {
-                       (*pparts)[i].name = "unnamed";
+                       parts[i].name = "unnamed";
                }
 
                part++;
        }
 
+       *pparts = parts;
        return nr_parts;
 }