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

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi Viresh,

On Wed, Dec 22, 2010 at 05:29:47PM +0530, viresh kumar wrote:
> 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.

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 <viresh.kumar@xxxxxx>
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(-)

diff --git a/drivers/mmc/core/bus.c b/drivers/mmc/core/bus.c
index af8dc6a..63667a8 100644
--- a/drivers/mmc/core/bus.c
+++ b/drivers/mmc/core/bus.c
@@ -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;
-- 
Chris Ball   <cjb@xxxxxxxxxx>   <http://printf.net/>
One Laptop Per Child
--
To unsubscribe from this list: send the line "unsubscribe linux-mmc" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[Index of Archives]     [Linux USB Devel]     [Linux Media]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux