[PATCH for-4.4] mtd: fix cmdlinepart parser, early naming for auto-filled MTD

Brian Norris computersforpeace at gmail.com
Mon Dec 14 11:24:02 PST 2015


On Fri, Dec 11, 2015 at 09:39:18PM -0800, Brian Norris wrote:
> On Sat, Dec 12, 2015 at 05:45:21AM +0100, Heiko Schocher wrote:
> > Am 12.12.2015 um 00:58 schrieb Brian Norris:
> > >Commit 807f16d4db95 ("mtd: core: set some defaults when dev.parent is
> > >set") attempted to provide some default settings for MTDs that
> > >  (a) assign the parent device and
> > >  (b) don't provide their own name or owner
> > >
> > >However, this isn't a perfect drop-in replacement for the boilerplate
> > >found in some drivers, because the MTD name is used by partition
> > >parsers like cmdlinepart, but the name isn't set until add_mtd_device(),
> > >after the parsing is completed. This means cmdlinepart sees a NULL name
> > >and therefore will not work properly.
> > >
> > >Fix this by moving the default name and owner assignment to be first in
> > >the MTD registration process.
> > >
> > >Fixes: 807f16d4db95 ("mtd: core: set some defaults when dev.parent is set")
> > >Reported-by: Heiko Schocher <hs at denx.de>
> > >Signed-off-by: Brian Norris <computersforpeace at gmail.com>
> > >Cc: Heiko Schocher <hs at denx.de>
> > >Cc: Frans Klaver <fransklaver at gmail.com>
> > >---
> > >Heiko, can you provide testing feedback (e.g., 'Tested-by: ...')?
> > 
> > Sorry, does not work for me:
> > 
> > Based on:
> > pollux:linux hs [20151212] $ git describe master
> > v4.4-rc4-135-gb9d8545
> > 
> > and this patch, shows the same problem,
> 
> [...]

BTW, can you please include the relevant log snippets when replying in
the future?

> Ugh, I see the problem. In nand_base.c, nand_get_flash_type():
> 
> 	if (!mtd->name)
> 		mtd->name = type->name;

Specifically, I think we could hack around this with something like the
following additional patch. Untested:

diff --git a/drivers/mtd/nand/nand_base.c b/drivers/mtd/nand/nand_base.c
index ece544efccc3..9f169566fba4 100644
--- a/drivers/mtd/nand/nand_base.c
+++ b/drivers/mtd/nand/nand_base.c
@@ -3826,6 +3826,9 @@ static struct nand_flash_dev *nand_get_flash_type(struct mtd_info *mtd,
 	if (!type)
 		type = nand_flash_ids;
 
+	if (!mtd->name && mtd->dev.parent)
+		mtd->name = dev_name(mtd->dev.parent);
+
 	for (; type->name != NULL; type++) {
 		if (is_full_id_nand(type)) {
 			if (find_full_id_nand(mtd, chip, type, id_data, &busw))



More information about the linux-mtd mailing list