mtd: mtdpart: Do not fail mtd probe when parsing partitions fails
[firefly-linux-kernel-4.4.55.git] / drivers / mtd / mtdpart.c
index f5279ea6dc871f42d34dc6f892f839a0928611f4..f8ba153f63bfebc5750a6d31b109dbc9d574cef8 100644 (file)
@@ -755,12 +755,12 @@ int parse_mtd_partitions(struct mtd_info *master, const char *const *types,
                         struct mtd_part_parser_data *data)
 {
        struct mtd_part_parser *parser;
-       int ret = 0;
+       int ret, err = 0;
 
        if (!types)
                types = default_mtd_part_types;
 
-       for ( ; ret <= 0 && *types; types++) {
+       for ( ; *types; types++) {
                pr_debug("%s: parsing partitions %s\n", master->name, *types);
                parser = get_partition_parser(*types);
                if (!parser && !request_module("%s", *types))
@@ -776,10 +776,16 @@ int parse_mtd_partitions(struct mtd_info *master, const char *const *types,
                if (ret > 0) {
                        printk(KERN_NOTICE "%d %s partitions found on MTD device %s\n",
                               ret, parser->name, master->name);
-                       break;
+                       return ret;
                }
+               /*
+                * Stash the first error we see; only report it if no parser
+                * succeeds
+                */
+               if (ret < 0 && !err)
+                       err = ret;
        }
-       return ret;
+       return err;
 }
 
 int mtd_is_partition(const struct mtd_info *mtd)