Skip to content

Commit

Permalink
mtd: Fix handling of mtdname in txx9ndfmc.c
Browse files Browse the repository at this point in the history
As pointed out by Kay Sievers, the name size limit is gone
from the driver-core, and BUS_ID_SIZE is obsolescent.

Rather than just papering over the problem by replacing the mtdname
array size with an arbitrary '20 + 2', fix the problem properly and
handle arbitrary name sizes.

Signed-off-by: David Woodhouse <David.Woodhouse@intel.com>
  • Loading branch information
David Woodhouse authored and David Woodhouse committed May 29, 2009
1 parent 9fd1e8f commit 8193304
Showing 1 changed file with 12 additions and 4 deletions.
16 changes: 12 additions & 4 deletions drivers/mtd/nand/txx9ndfmc.c
Original file line number Diff line number Diff line change
Expand Up @@ -64,7 +64,7 @@ struct txx9ndfmc_priv {
struct nand_chip chip;
struct mtd_info mtd;
int cs;
char mtdname[BUS_ID_SIZE + 2];
const char *mtdname;
};

#define MAX_TXX9NDFMC_DEV 4
Expand Down Expand Up @@ -334,11 +334,17 @@ static int __init txx9ndfmc_probe(struct platform_device *dev)

if (plat->ch_mask != 1) {
txx9_priv->cs = i;
sprintf(txx9_priv->mtdname, "%s.%u",
dev_name(&dev->dev), i);
txx9_priv->mtdname = kasprintf(GFP_KERNEL, "%s.%u",
dev_name(&dev->dev), i);
if (!txx9_priv->mtdname) {
kfree(txx9_priv);
dev_err(&dev->dev,
"Unable to allocate TXx9 NDFMC MTD device name.\n");
continue;
}
} else {
txx9_priv->cs = -1;
strcpy(txx9_priv->mtdname, dev_name(&dev->dev));
txx9_priv->mtdname = dev_name(&dev->dev);
}
if (plat->wide_mask & (1 << i))
chip->options |= NAND_BUSWIDTH_16;
Expand Down Expand Up @@ -385,6 +391,8 @@ static int __exit txx9ndfmc_remove(struct platform_device *dev)
kfree(drvdata->parts[i]);
#endif
del_mtd_device(mtd);
if (txx9_priv->mtdname != dev_name(&dev->dev))
kfree(txx9_priv->mtdname);
kfree(txx9_priv);
}
return 0;
Expand Down

0 comments on commit 8193304

Please sign in to comment.