Skip to contentSkip to conversation

mmc_test mmc0:0001: Can't create file. Perhaps debugfs is disabled

DISCUSSION viresh kumar 2 participants 4 messages Dec 22, 2010 – Jan 5, 2011 MMC, SD and SDIO

lore
Share & tools
lore
#0 lore raw

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.
#1 lore raw

Hi Viresh,

Quoted 23 lines · viresh kumar

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

...
}

Quoted 8 lines

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.

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
index af8dc6a..63667a8 100644
@@ -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
#2 lore raw
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 && 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?

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 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 +0 -4
index af8dc6a..63667a8 100644
@@ -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 -0
 	mmc_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
#3 lore raw

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