Messages in this thread Patch in this message | | | Subject | RE: [PATCH 1/2] mtdpart: memory accessor interface for MTD layer | From | David Woodhouse <> | Date | Sun, 08 Aug 2010 13:23:18 +0100 |
| |
On Fri, 2010-08-06 at 12:18 +0530, Sudhakar Rajashekhara wrote: > > Thanks for the feedback. I'll be re-working on this patch and will > re-post > the updated patch soon.
Start with this, perhaps...
Subject: mtd/partitions: Add add_mtd_partitions_ret() function
Some callers want access to the MTD devices which get registered for them when they call add_mtd_partitions(). Add a variant on the function which does that.
Signed-off-by: David Woodhouse <David.Woodhouse@intel.com>
diff --git a/drivers/mtd/mtdpart.c b/drivers/mtd/mtdpart.c index 4c539de..b9ee79b 100644 --- a/drivers/mtd/mtdpart.c +++ b/drivers/mtd/mtdpart.c @@ -522,26 +522,36 @@ out_register: * for reasons of data integrity. */ -int add_mtd_partitions(struct mtd_info *master, - const struct mtd_partition *parts, - int nbparts) +int add_mtd_partitions_ret(struct mtd_info *master, + const struct mtd_partition *parts, + int nbparts, struct mtd_info ***mtds_ret) { struct mtd_part *slave; uint64_t cur_offset = 0; + struct mtd_info **mtds = NULL; int i; printk(KERN_NOTICE "Creating %d MTD partitions on \"%s\":\n", nbparts, master->name); + if (mtds_ret) { + mtds = kmalloc(sizeof(*mtds) * nbparts, GFP_KERNEL); + if (!mtds) + return -ENOMEM; + } for (i = 0; i < nbparts; i++) { slave = add_one_partition(master, parts + i, i, cur_offset); - if (!slave) + if (!slave) { + kfree(mtds); return -ENOMEM; + } cur_offset = slave->offset + slave->mtd.size; } + if (mtds_ret) + *mtds_ret = mtds; return 0; } -EXPORT_SYMBOL(add_mtd_partitions); +EXPORT_SYMBOL_GPL(add_mtd_partitions_ret); static DEFINE_SPINLOCK(part_parser_lock); static LIST_HEAD(part_parsers); diff --git a/include/linux/mtd/partitions.h b/include/linux/mtd/partitions.h index 274b619..f7935fa 100644 --- a/include/linux/mtd/partitions.h +++ b/include/linux/mtd/partitions.h @@ -49,9 +49,12 @@ struct mtd_partition { struct mtd_info; -int add_mtd_partitions(struct mtd_info *, const struct mtd_partition *, int); +int add_mtd_partitions_ret(struct mtd_info *, const struct mtd_partition *, int, + struct mtd_info ***); int del_mtd_partitions(struct mtd_info *); +#define add_mtd_partitions(m, p, n) add_mtd_partitions_ret(m, p, n, NULL) + /* * Functions dealing with the various ways of partitioning the space */ -- David Woodhouse Open Source Technology Centre David.Woodhouse@intel.com Intel Corporation
| |