Commit 1530578a authored by Boris Brezillon's avatar Boris Brezillon Committed by Richard Weinberger

mtd: Avoid probe failures when mtd->dbg.dfs_dir is invalid

Commit e8e3edb9 ("mtd: create per-device and module-scope debugfs
entries") tried to make MTD related debugfs stuff consistent across the
MTD framework by creating a root <debugfs>/mtd/ directory containing
one directory per MTD device.

The problem is that, by default, the MTD layer only registers the
master device if no partitions are defined for this master. This
behavior breaks all drivers that expect mtd->dbg.dfs_dir to be filled
correctly after calling mtd_device_register() in order to add their own
debugfs entries.

The only way we can force all MTD masters to be registered no matter if
they expose partitions or not is by enabling the
CONFIG_MTD_PARTITIONED_MASTER option.

In such situations, there's no other solution but to accept skipping
debugfs initialization when dbg.dfs_dir is invalid, and when this
happens, inform the user that he should consider enabling
CONFIG_MTD_PARTITIONED_MASTER.

Fixes: e8e3edb9 ("mtd: create per-device and module-scope debugfs entries")
Cc: <stable@vger.kernel.org>
Cc: Mario J. Rugiero <mrugiero@gmail.com>
Signed-off-by: default avatarBoris Brezillon <boris.brezillon@free-electrons.com>
Reported-by: default avatarRichard Weinberger <richard@nod.at>
Signed-off-by: default avatarRichard Weinberger <richard@nod.at>
parent 8a4580e4
...@@ -1814,8 +1814,13 @@ static void __init doc_dbg_register(struct mtd_info *floor) ...@@ -1814,8 +1814,13 @@ static void __init doc_dbg_register(struct mtd_info *floor)
struct dentry *root = floor->dbg.dfs_dir; struct dentry *root = floor->dbg.dfs_dir;
struct docg3 *docg3 = floor->priv; struct docg3 *docg3 = floor->priv;
if (IS_ERR_OR_NULL(root)) if (IS_ERR_OR_NULL(root)) {
if (IS_ENABLED(CONFIG_DEBUG_FS) &&
!IS_ENABLED(CONFIG_MTD_PARTITIONED_MASTER))
dev_warn(floor->dev.parent,
"CONFIG_MTD_PARTITIONED_MASTER must be enabled to expose debugfs stuff\n");
return; return;
}
debugfs_create_file("docg3_flashcontrol", S_IRUSR, root, docg3, debugfs_create_file("docg3_flashcontrol", S_IRUSR, root, docg3,
&flashcontrol_fops); &flashcontrol_fops);
......
...@@ -520,11 +520,16 @@ static int nandsim_debugfs_create(struct nandsim *dev) ...@@ -520,11 +520,16 @@ static int nandsim_debugfs_create(struct nandsim *dev)
struct dentry *root = nsmtd->dbg.dfs_dir; struct dentry *root = nsmtd->dbg.dfs_dir;
struct dentry *dent; struct dentry *dent;
if (!IS_ENABLED(CONFIG_DEBUG_FS)) /*
* Just skip debugfs initialization when the debugfs directory is
* missing.
*/
if (IS_ERR_OR_NULL(root)) {
if (IS_ENABLED(CONFIG_DEBUG_FS) &&
!IS_ENABLED(CONFIG_MTD_PARTITIONED_MASTER))
NS_WARN("CONFIG_MTD_PARTITIONED_MASTER must be enabled to expose debugfs stuff\n");
return 0; return 0;
}
if (IS_ERR_OR_NULL(root))
return -1;
dent = debugfs_create_file("nandsim_wear_report", S_IRUSR, dent = debugfs_create_file("nandsim_wear_report", S_IRUSR,
root, dev, &dfs_fops); root, dev, &dfs_fops);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment