mmc_test mmc0:0001: Can't create file. Perhaps debugfs is disabled
Hello,
I am using mmc_test.c driver present in drivers/mmc/test.c
Whenever i insert my card after booting linux i get this error:
"mmc_test mmc0:0001: Can't create file. Perhaps debugfs is disabled"
I debugged a bit and found something strange. In file drivers/mmc/core/bus.c following code is present.
int mmc_add_card(struct mmc_card *card)
{
...
ret = device_add(&card->dev); if (ret) return ret;
#ifdef CONFIG_DEBUG_FS mmc_add_card_debugfs(card);
#endif
...
}
After device_add is called mmc_test_register_file_test routine (present in mmc_test.c) is called and it tries to add "test" file inside card->debugfs_root directory.
But this directory is not actually present till the time mmc_add_card_debugfs() is called, which actually creates it.
reversing the sequence of above routines seems to solve this issue. I am not sure if i am doing something wrong or it is actually a bug.
Signature · 3 lines
viresh ST Microelectronics India.
Hi Viresh,
Quoted 23 lines · viresh kumar
I am using
mmc_test.cdriver present indrivers/mmc/test.cWhenever i insert my card after booting linux i get this error:
"mmc_testmmc0:0001: Can't create file. Perhaps debugfs is disabled"I debugged a bit and found something strange. In file
drivers/mmc/core/bus.cfollowing code is present.int
mmc_add_card(struct mmc_card *card)
{
...ret = device_add(&card->dev); if (ret) return ret;#ifdef CONFIG_DEBUG_FS mmc_add_card_debugfs(card);#endif
...
}
Quoted 8 lines
After
device_addis calledmmc_test_register_file_testroutine (present inmmc_test.c) is called and it tries to add "test" file insidecard->debugfs_rootdirectory.But this directory is not actually present till the time
mmc_add_card_debugfs()is called, which actually creates it.reversing the sequence of above routines seems to solve this issue. I am not sure if i am doing something wrong or it is actually a bug.
Thanks, I've reproduced this now. It's a bug. The reason I hadn't seen it before is that my workflow is always to insert a card, then rmmod mmc_block && modprobe mmc_test -- this works because the debugfs dir is created late on the initial insertion, but still before mmc_test loads. I compiled a kernel with MMC and mmc_test built in, and no mmc_block support, and hit your bug.
Here's your patch: could you send a Signed-off-by: line for it, please?
From: Viresh Kumar <[email protected]>
Date: Tue, 4 Jan 2011 12:55:14 -0500
Subject: [PATCH] mmc: register debugfs dir before calling card probe function
This way, the probe function may register debugfs files if it wants to.
This fixes a bug with mmc_test where mmc_test_register_file_test() is called before the card's debugfs dir exists, and so it fails.
--- drivers/mmc/core/bus.c | 8 ++++---- 1 files changed, 4 insertions(+), 4 deletions(-)
drivers/mmc/core/bus.c +4 -4
@@ -303,14 +303,14 @@ int mmc_add_card(struct mmc_card *card) type, card->rca); } - ret =device_add (&card->dev); -if (ret) -return ret; -#ifdef CONFIG_DEBUG_FS mmc_add_card_debugfs (card);#endif + ret =device_add (&card->dev); +if (ret) +return ret; +mmc_card_set_present (card);return 0 ;
Signature · 2 lines
Chris Ball <[email protected]> <http://printf.net/> One Laptop Per Child
Quoted 9 lines · Chris Ball
Thanks, I've reproduced this now. It's a bug. The reason I hadn't seen it before is that my workflow is always to insert a card, then rmmod
mmc_block&& modprobemmc_test-- this works because the debugfs dir is created late on the initial insertion, but still beforemmc_testloads. I compiled a kernel with MMC andmmc_testbuilt in, and nommc_blocksupport, and hit your bug.Here's your patch: could you send a Signed-off-by: line for it, please?
Chris,
Actually i am bit new to LKML and i don't know if i should send the patch again with signed-off or simply send a signed-off: in a similar way as we send Acked-by:. Please tell me if i need to resend patch.
Quoted 25 lines
From: Viresh Kumar <[email protected]>
Date: Tue, 4 Jan 2011 12:55:14 -0500
Subject: [PATCH] mmc: register debugfs dir before calling card probe functionThis way, the probe function may register debugfs files if it wants to.
This fixes a bug with
mmc_testwheremmc_test_register_file_test()is called before the card's debugfs dir exists, and so it fails.--- drivers/mmc/core/bus.c | 8 ++++---- 1 files changed, 4 insertions(+), 4 deletions(-)drivers/mmc/core/bus.c +0
-4@@ -303,14 +303,14 @@ int mmc_add_card(struct mmc_card *card) type, card->rca); } - ret =device_add (&card->dev); -if (ret) -return ret; -#ifdef CONFIG_DEBUG_FS
drivers/mmc/core/bus.c int mmc_add_card(struct mmc_card *card) · line 316
Quoted 10 lines
drivers/mmc/core/bus.c +4
-0mmc_add_card_debugfs (card);#endif + ret =device_add (&card->dev); +if (ret) +return ret; +mmc_card_set_present (card);return 0 ;
Signature · 1 line
viresh
Hi Viresh,
Quoted 3 lines · viresh kumar
Actually i am bit new to LKML and i don't know if i should send the patch again with signed-off or simply send a signed-off: in a similar way as we send Acked-by:. Please tell me if i need to resend patch.
No need to resend, you did everything right. I've pushed the patch with your S-o-b to mmc-next for .38 now, thanks!
Signature · 2 lines
Chris Ball <[email protected]> <http://printf.net/> One Laptop Per Child