| From 85ef918b63ceb31e409c6f88b23a71e07d7ed2c8 Mon Sep 17 00:00:00 2001 |
| From: Sasha Levin <sashal@kernel.org> |
| Date: Thu, 14 Oct 2021 13:39:52 -0700 |
| Subject: mtd: core: don't remove debugfs directory if device is in use |
| |
| From: Zev Weiss <zev@bewilderbeest.net> |
| |
| [ Upstream commit c13de2386c78e890d4ae6f01a85eefd0b293fb08 ] |
| |
| Previously, if del_mtd_device() failed with -EBUSY due to a non-zero |
| usecount, a subsequent call to attempt the deletion again would try to |
| remove a debugfs directory that had already been removed and panic. |
| With this change the second call can instead proceed safely. |
| |
| Fixes: e8e3edb95ce6 ("mtd: create per-device and module-scope debugfs entries") |
| Signed-off-by: Zev Weiss <zev@bewilderbeest.net> |
| Signed-off-by: Miquel Raynal <miquel.raynal@bootlin.com> |
| Link: https://lore.kernel.org/linux-mtd/20211014203953.5424-1-zev@bewilderbeest.net |
| Signed-off-by: Sasha Levin <sashal@kernel.org> |
| --- |
| drivers/mtd/mtdcore.c | 4 ++-- |
| 1 file changed, 2 insertions(+), 2 deletions(-) |
| |
| diff --git a/drivers/mtd/mtdcore.c b/drivers/mtd/mtdcore.c |
| index 32a76b8feaa5d..ac5d3b6db9b84 100644 |
| --- a/drivers/mtd/mtdcore.c |
| +++ b/drivers/mtd/mtdcore.c |
| @@ -727,8 +727,6 @@ int del_mtd_device(struct mtd_info *mtd) |
| |
| mutex_lock(&mtd_table_mutex); |
| |
| - debugfs_remove_recursive(mtd->dbg.dfs_dir); |
| - |
| if (idr_find(&mtd_idr, mtd->index) != mtd) { |
| ret = -ENODEV; |
| goto out_error; |
| @@ -744,6 +742,8 @@ int del_mtd_device(struct mtd_info *mtd) |
| mtd->index, mtd->name, mtd->usecount); |
| ret = -EBUSY; |
| } else { |
| + debugfs_remove_recursive(mtd->dbg.dfs_dir); |
| + |
| /* Try to remove the NVMEM provider */ |
| if (mtd->nvmem) |
| nvmem_unregister(mtd->nvmem); |
| -- |
| 2.33.0 |
| |