Commit e0489f6e authored by Michael Walle's avatar Michael Walle Committed by Miquel Raynal
Browse files

mtd: core: fix error path for nvmem provider



If mtd_otp_nvmem_add() fails, the partitions won't be removed
because there is simply no call to del_mtd_partitions().
Unfortunately, add_mtd_partitions() will print all partitions to
the kernel console. If mtd_otp_nvmem_add() returns -EPROBE_DEFER
this would print the partitions multiple times to the kernel
console. Instead move mtd_otp_nvmem_add() to the beginning of the
function.

Fixes: 4b361cfa ("mtd: core: add OTP nvmem provider support")
Cc: stable@vger.kernel.org
Signed-off-by: default avatarMichael Walle <michael@walle.cc>
Signed-off-by: default avatarMiquel Raynal <miquel.raynal@bootlin.com>
Link: https://lore.kernel.org/linux-mtd/20230308082021.870459-3-michael@walle.cc
parent 8bd1d24e
Loading
Loading
Loading
Loading
+10 −3
Original line number Original line Diff line number Diff line
@@ -1023,10 +1023,14 @@ int mtd_device_parse_register(struct mtd_info *mtd, const char * const *types,


	mtd_set_dev_defaults(mtd);
	mtd_set_dev_defaults(mtd);


	ret = mtd_otp_nvmem_add(mtd);
	if (ret)
		goto out;

	if (IS_ENABLED(CONFIG_MTD_PARTITIONED_MASTER)) {
	if (IS_ENABLED(CONFIG_MTD_PARTITIONED_MASTER)) {
		ret = add_mtd_device(mtd);
		ret = add_mtd_device(mtd);
		if (ret)
		if (ret)
			return ret;
			goto out;
	}
	}


	/* Prefer parsed partitions over driver-provided fallback */
	/* Prefer parsed partitions over driver-provided fallback */
@@ -1061,9 +1065,12 @@ int mtd_device_parse_register(struct mtd_info *mtd, const char * const *types,
		register_reboot_notifier(&mtd->reboot_notifier);
		register_reboot_notifier(&mtd->reboot_notifier);
	}
	}


	ret = mtd_otp_nvmem_add(mtd);

out:
out:
	if (ret) {
		nvmem_unregister(mtd->otp_user_nvmem);
		nvmem_unregister(mtd->otp_factory_nvmem);
	}

	if (ret && device_is_registered(&mtd->dev))
	if (ret && device_is_registered(&mtd->dev))
		del_mtd_device(mtd);
		del_mtd_device(mtd);