[PATCH 4/4] mtd: warn when registering the same master many times

Brian Norris computersforpeace at gmail.com
Mon Oct 26 14:35:14 PDT 2015


On Tue, Jun 02, 2015 at 10:03:10AM +0200, Richard Weinberger wrote:
> Am 02.06.2015 um 01:17 schrieb Brian Norris:
> > When CONFIG_MTD_PARTITIONED_MASTER=y, it is fatal to call
> > mtd_device_parse_register() twice on the same MTD, as we try to register
> > the same device/kobject multipile times.
> > 
> > When CONFIG_MTD_PARTITIONED_MASTER=n, calling
> > mtd_device_parse_register() is more of just a nuisance, as we can mostly
> > navigate around any conflicting actions.
> > 
> > But anyway, doing so is a Bad Thing (TM), and we should complain loudly
> > for any drivers that try to do this.
> > 
> > Signed-off-by: Brian Norris <computersforpeace at gmail.com>
> > ---
> >  drivers/mtd/mtdcore.c | 9 +++++++++
> >  1 file changed, 9 insertions(+)
> > 
> > diff --git a/drivers/mtd/mtdcore.c b/drivers/mtd/mtdcore.c
> > index 03eec42dc715..f0e157e0be89 100644
> > --- a/drivers/mtd/mtdcore.c
> > +++ b/drivers/mtd/mtdcore.c
> > @@ -387,6 +387,14 @@ int add_mtd_device(struct mtd_info *mtd)
> >  	struct mtd_notifier *not;
> >  	int i, error;
> >  
> > +	/*
> > +	 * May occur, for instance, on buggy drivers which call
> > +	 * mtd_device_parse_register() multiple times on the same master MTD,
> > +	 * especially with CONFIG_MTD_PARTITIONED_MASTER=y.
> > +	 */
> > +	if (WARN(mtd->backing_dev_info, "MTD already registered\n"))
> > +		return -EEXIST;
> > +
> >  	mtd->backing_dev_info = &mtd_bdi;
> >  
> >  	BUG_ON(mtd->writesize == 0);
> > @@ -597,6 +605,7 @@ int mtd_device_parse_register(struct mtd_info *mtd, const char * const *types,
> >  	 * does cause problems with parse_mtd_partitions() above (e.g.,
> >  	 * cmdlineparts will register partitions more than once).
> >  	 */
> > +	WARN(mtd->reboot_notifier.notifier_call, "MTD already registered\n");
> >  	if (mtd->_reboot && !mtd->reboot_notifier.notifier_call) {
> >  		mtd->reboot_notifier.notifier_call = mtd_reboot_notifier;
> >  		register_reboot_notifier(&mtd->reboot_notifier);
> 
> One minor nit, IMHO WARN_ONCE() would make more sense.
> 
> Beside of that:
> Reviewed-by: Richard Weinberger <richard at nod.at>

Changed to WARN_ONCE() and applied



More information about the linux-mtd mailing list