Revert "kernel: rewrite run_parsers_by_type() to use add_mtd_partitions()"
[openwrt/staging/dedeckeh.git] / target / linux / generic / pending-4.14 / 401-mtd-add-support-for-different-partition-parser-types.patch
index ae13112ef6d0b4a00863ab0970081e481a3ab101..057d47368443346846c4a2bf2065659d4b030e6e 100644 (file)
@@ -20,35 +20,44 @@ Signed-off-by: Gabor Juhos <juhosg@openwrt.org>
  
  /*
   * Given a pointer to the MTD object in the mtd_part structure, we can retrieve
-@@ -762,6 +766,27 @@ int mtd_del_partition(struct mtd_info *m
+@@ -762,6 +766,36 @@ int mtd_del_partition(struct mtd_info *m
  }
  EXPORT_SYMBOL_GPL(mtd_del_partition);
  
 +static int
 +run_parsers_by_type(struct mtd_part *slave, enum mtd_parser_type type)
 +{
-+      struct mtd_partitions pparts = { };
-+      int err;
++      struct mtd_partition *parts;
++      int nr_parts;
++      int i;
 +
-+      pparts.nr_parts = parse_mtd_partitions_by_type(&slave->mtd, type,
-+                                                     &pparts.parts, NULL);
-+      if (pparts.nr_parts <= 0)
-+              return pparts.nr_parts;
++      nr_parts = parse_mtd_partitions_by_type(&slave->mtd, type, (const struct mtd_partition **)&parts,
++                                              NULL);
++      if (nr_parts <= 0)
++              return nr_parts;
 +
-+      if (WARN_ON(!pparts.parts))
++      if (WARN_ON(!parts))
 +              return 0;
 +
-+      err = add_mtd_partitions(&slave->mtd, pparts.parts, pparts.nr_parts);
++      for (i = 0; i < nr_parts; i++) {
++              /* adjust partition offsets */
++              parts[i].offset += slave->offset;
 +
-+      kfree(pparts.parts);
++              mtd_add_partition(slave->parent,
++                                parts[i].name,
++                                parts[i].offset,
++                                parts[i].size);
++      }
++
++      kfree(parts);
 +
-+      return err ? err : pparts.nr_parts;
++      return nr_parts;
 +}
 +
  #ifdef CONFIG_MTD_SPLIT_FIRMWARE_NAME
  #define SPLIT_FIRMWARE_NAME   CONFIG_MTD_SPLIT_FIRMWARE_NAME
  #else
-@@ -1147,6 +1172,61 @@ void mtd_part_parser_cleanup(struct mtd_
+@@ -1147,6 +1181,61 @@ void mtd_part_parser_cleanup(struct mtd_
        }
  }