[MTD] mtdpart: Make all partition parsers return allocated array

Linux-MTD Mailing List linux-mtd at lists.infradead.org
Fri Mar 20 15:00:00 EDT 2009


Gitweb:     http://git.infradead.org/?p=mtd-2.6.git;a=commit;h=17b536cc43bcf2afcc20b4812f93a895881b5f4f
Commit:     17b536cc43bcf2afcc20b4812f93a895881b5f4f
Parent:     bd50a0ffca0bbb9baa60ab1ef2c09cf7561e1223
Author:     Atsushi Nemoto <anemo at mba.ocn.ne.jp>
AuthorDate: Fri Mar 6 20:01:08 2009 +0900
Committer:  David Woodhouse <David.Woodhouse at intel.com>
CommitDate: Fri Mar 20 18:55:17 2009 +0000

    [MTD] mtdpart: Make all partition parsers return allocated array
    
    Currently redboot and afx parser return allocated mtd_partition array
    and cmdlinepart and ar7 return persistent array.
    
    This patch make cmdlinepart and ar7 also return allocated array, so
    that all users can free it regardless of parser type.
    
    Signed-off-by: Atsushi Nemoto <anemo at mba.ocn.ne.jp>
    Signed-off-by: David Woodhouse <David.Woodhouse at intel.com>
---
 drivers/mtd/ar7part.c     |    6 ++++--
 drivers/mtd/cmdlinepart.c |    6 +++++-
 2 files changed, 9 insertions(+), 3 deletions(-)

diff --git a/drivers/mtd/ar7part.c b/drivers/mtd/ar7part.c
index ecf170b..6697a1e 100644
--- a/drivers/mtd/ar7part.c
+++ b/drivers/mtd/ar7part.c
@@ -44,8 +44,6 @@ struct ar7_bin_rec {
 	unsigned int address;
 };
 
-static struct mtd_partition ar7_parts[AR7_PARTS];
-
 static int create_mtd_partitions(struct mtd_info *master,
 				 struct mtd_partition **pparts,
 				 unsigned long origin)
@@ -57,7 +55,11 @@ static int create_mtd_partitions(struct mtd_info *master,
 	unsigned int root_offset = ROOT_OFFSET;
 
 	int retries = 10;
+	struct mtd_partition *ar7_parts;
 
+	ar7_parts = kzalloc(sizeof(*ar7_parts) * AR7_PARTS, GFP_KERNEL);
+	if (!ar7_parts)
+		return -ENOMEM;
 	ar7_parts[0].name = "loader";
 	ar7_parts[0].offset = 0;
 	ar7_parts[0].size = master->erasesize;
diff --git a/drivers/mtd/cmdlinepart.c b/drivers/mtd/cmdlinepart.c
index 50a3403..5011fa7 100644
--- a/drivers/mtd/cmdlinepart.c
+++ b/drivers/mtd/cmdlinepart.c
@@ -335,7 +335,11 @@ static int parse_cmdline_partitions(struct mtd_info *master,
 				}
 				offset += part->parts[i].size;
 			}
-			*pparts = part->parts;
+			*pparts = kmemdup(part->parts,
+					sizeof(*part->parts) * part->num_parts,
+					GFP_KERNEL);
+			if (!*pparts)
+				return -ENOMEM;
 			return part->num_parts;
 		}
 	}



More information about the linux-mtd-cvs mailing list