[PATCH 4/4] mtd: warn when registering the same master many times
Richard Weinberger
richard at nod.at
Tue Jun 2 01:03:10 PDT 2015
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>
Thanks,
//richard
More information about the linux-mtd
mailing list