From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from down.free-electrons.com ([37.187.137.238] helo=mail.free-electrons.com) by bombadil.infradead.org with esmtp (Exim 4.80.1 #2 (Red Hat Linux)) id 1a50Hr-0004qv-BC for linux-mtd@lists.infradead.org; Sat, 05 Dec 2015 00:01:16 +0000 Date: Sat, 5 Dec 2015 01:00:52 +0100 From: Boris Brezillon To: Brian Norris Cc: , Linus Walleij , Simon Arlott Subject: Re: [PATCH v2 4/6] mtd: partitions: remove kmemdup() Message-ID: <20151205010052.2aada5c3@bbrezillon> In-Reply-To: <1449271518-118900-5-git-send-email-computersforpeace@gmail.com> References: <1449271518-118900-1-git-send-email-computersforpeace@gmail.com> <1449271518-118900-5-git-send-email-computersforpeace@gmail.com> MIME-Version: 1.0 Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: 7bit List-Id: Linux MTD discussion mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , On Fri, 4 Dec 2015 15:25:16 -0800 Brian Norris wrote: > The use of kmemdup() complicates the error handling a bit. We don't > actually need to allocate new memory, since this reference is treated as > const, and it is copied into new memory by the partition registration > code anyway. So remove it. > > Signed-off-by: Brian Norris Reviewed-by: Boris Brezillon > --- > New in v2 > > drivers/mtd/mtdcore.c | 16 +++++++--------- > drivers/mtd/mtdcore.h | 2 +- > drivers/mtd/mtdpart.c | 2 +- > 3 files changed, 9 insertions(+), 11 deletions(-) > > diff --git a/drivers/mtd/mtdcore.c b/drivers/mtd/mtdcore.c > index 62f83b050978..868ee52d5063 100644 > --- a/drivers/mtd/mtdcore.c > +++ b/drivers/mtd/mtdcore.c > @@ -532,7 +532,7 @@ out_error: > } > > static int mtd_add_device_partitions(struct mtd_info *mtd, > - struct mtd_partition *real_parts, > + const struct mtd_partition *real_parts, > int nbparts) > { > int ret; > @@ -589,16 +589,12 @@ int mtd_device_parse_register(struct mtd_info *mtd, const char * const *types, > int nr_parts) > { > int ret; > - struct mtd_partition *real_parts = NULL; > + const struct mtd_partition *real_parts = NULL; > > ret = parse_mtd_partitions(mtd, types, &real_parts, parser_data); > if (ret <= 0 && nr_parts && parts) { > - real_parts = kmemdup(parts, sizeof(*parts) * nr_parts, > - GFP_KERNEL); > - if (!real_parts) > - ret = -ENOMEM; > - else > - ret = nr_parts; > + real_parts = parts; > + ret = nr_parts; > } > /* Didn't come up with either parsed OR fallback partitions */ > if (ret < 0) { > @@ -628,7 +624,9 @@ int mtd_device_parse_register(struct mtd_info *mtd, const char * const *types, > } > > out: > - kfree(real_parts); > + /* Cleanup any parsed partitions */ > + if (real_parts != parts) > + kfree(real_parts); > return ret; > } > EXPORT_SYMBOL_GPL(mtd_device_parse_register); > diff --git a/drivers/mtd/mtdcore.h b/drivers/mtd/mtdcore.h > index 7b0353399a10..537ec66f9cfd 100644 > --- a/drivers/mtd/mtdcore.h > +++ b/drivers/mtd/mtdcore.h > @@ -11,7 +11,7 @@ int del_mtd_device(struct mtd_info *mtd); > int add_mtd_partitions(struct mtd_info *, const struct mtd_partition *, int); > int del_mtd_partitions(struct mtd_info *); > int parse_mtd_partitions(struct mtd_info *master, const char * const *types, > - struct mtd_partition **pparts, > + const struct mtd_partition **pparts, > struct mtd_part_parser_data *data); > > int __init init_mtdchar(void); > diff --git a/drivers/mtd/mtdpart.c b/drivers/mtd/mtdpart.c > index c6fd4b24c822..86691a5c68b9 100644 > --- a/drivers/mtd/mtdpart.c > +++ b/drivers/mtd/mtdpart.c > @@ -757,7 +757,7 @@ static const char * const default_mtd_part_types[] = { > * point to an array containing this number of &struct mtd_info objects. > */ > int parse_mtd_partitions(struct mtd_info *master, const char *const *types, > - struct mtd_partition **pparts, > + const struct mtd_partition **pparts, > struct mtd_part_parser_data *data) > { > struct mtd_part_parser *parser; -- Boris Brezillon, Free Electrons Embedded Linux and Kernel engineering http://free-electrons.com