mail archive of the barebox mailing list
 help / color / mirror / Atom feed
* FAT filesystem write and long names stability
@ 2011-12-05 17:51 Robert Jarzmik
  2011-12-05 20:03 ` Franck JULLIEN
  0 siblings, 1 reply; 11+ messages in thread
From: Robert Jarzmik @ 2011-12-05 17:51 UTC (permalink / raw)
  To: barebox


Does anyone have a feedback about the FAT filesystem support in barebox ?

From my first tests, I think that :
 - long filenames is a bit buggy (when activated, I have a exception in a ls
 command)
 - write doesn't seem to work : on a mounted SD card, I make a "mkdir toto",
 then dismount and remount => the directory is gone.

Is anyone else doing tests in this area ?

Cheers.

-- 
Robert

_______________________________________________
barebox mailing list
barebox@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/barebox

^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: FAT filesystem write and long names stability
  2011-12-05 17:51 FAT filesystem write and long names stability Robert Jarzmik
@ 2011-12-05 20:03 ` Franck JULLIEN
  2011-12-05 20:40   ` Robert Jarzmik
  0 siblings, 1 reply; 11+ messages in thread
From: Franck JULLIEN @ 2011-12-05 20:03 UTC (permalink / raw)
  To: Robert Jarzmik; +Cc: barebox

Hi Robert,

2011/12/5 Robert Jarzmik <robert.jarzmik@free.fr>:
>
> Does anyone have a feedback about the FAT filesystem support in barebox ?
>
> From my first tests, I think that :
>  - long filenames is a bit buggy (when activated, I have a exception in a ls
>  command)
>  - write doesn't seem to work : on a mounted SD card, I make a "mkdir toto",
>  then dismount and remount => the directory is gone.
>
> Is anyone else doing tests in this area ?
>
> Cheers.
>
> --
> Robert
>
> _______________________________________________
> barebox mailing list
> barebox@lists.infradead.org
> http://lists.infradead.org/mailman/listinfo/barebox

Do you have this patch applied to your working branch ? :

fs/fat: Initialize local variable finfo

fat_stat in fs/fat.c declares finfo but doesn't initialize it.
When get_fileinfo is called, fno->lfname and fno->lfsize are
tested but haven't been zeroed...This can lead to a wrong
behavior.

When I worked on MMC SPI, I had problems with long file names. This
uninitialized
varible was the root cause...

_______________________________________________
barebox mailing list
barebox@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/barebox

^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: FAT filesystem write and long names stability
  2011-12-05 20:03 ` Franck JULLIEN
@ 2011-12-05 20:40   ` Robert Jarzmik
  2011-12-05 20:43     ` Franck JULLIEN
  0 siblings, 1 reply; 11+ messages in thread
From: Robert Jarzmik @ 2011-12-05 20:40 UTC (permalink / raw)
  To: Franck JULLIEN; +Cc: barebox

Franck JULLIEN <franck.jullien@gmail.com> writes:

> Do you have this patch applied to your working branch ? :
>
> fs/fat: Initialize local variable finfo
Hi Franck,

I cross-checked, and indeed I do not have this fix in my branch, while it sits
in next branch. I'll rebase and make another try.

Do you by any chance tried the "write" part of FAT ?

Cheers.

-- 
Robert

_______________________________________________
barebox mailing list
barebox@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/barebox

^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: FAT filesystem write and long names stability
  2011-12-05 20:40   ` Robert Jarzmik
@ 2011-12-05 20:43     ` Franck JULLIEN
  2011-12-06 10:01       ` Robert Jarzmik
  0 siblings, 1 reply; 11+ messages in thread
From: Franck JULLIEN @ 2011-12-05 20:43 UTC (permalink / raw)
  To: Robert Jarzmik; +Cc: barebox

2011/12/5 Robert Jarzmik <robert.jarzmik@free.fr>:
> Franck JULLIEN <franck.jullien@gmail.com> writes:
>
>> Do you have this patch applied to your working branch ? :
>>
>> fs/fat: Initialize local variable finfo
> Hi Franck,
>
> I cross-checked, and indeed I do not have this fix in my branch, while it sits
> in next branch. I'll rebase and make another try.
>
> Do you by any chance tried the "write" part of FAT ?
>
> Cheers.
>
> --
> Robert

Yes I did try it and as far as I can tell it works. I wrote some test
files to the SD then read it back on the PC and file were there....
I don't think I tried to create folders.

_______________________________________________
barebox mailing list
barebox@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/barebox

^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: FAT filesystem write and long names stability
  2011-12-05 20:43     ` Franck JULLIEN
@ 2011-12-06 10:01       ` Robert Jarzmik
  2011-12-07  8:37         ` Sascha Hauer
  0 siblings, 1 reply; 11+ messages in thread
From: Robert Jarzmik @ 2011-12-06 10:01 UTC (permalink / raw)
  To: Franck JULLIEN; +Cc: barebox

Franck JULLIEN <franck.jullien@gmail.com> writes:

> 2011/12/5 Robert Jarzmik <robert.jarzmik@free.fr>:
>> Franck JULLIEN <franck.jullien@gmail.com> writes:
>>
>>> Do you have this patch applied to your working branch ? :
>>>
>>> fs/fat: Initialize local variable finfo
>> Hi Franck,
>>
>> I cross-checked, and indeed I do not have this fix in my branch, while it sits
>> in next branch. I'll rebase and make another try.
Good guess, with that patch no bug :)

>> Do you by any chance tried the "write" part of FAT ?
> Yes I did try it and as far as I can tell it works. I wrote some test
> files to the SD then read it back on the PC and file were there....
> I don't think I tried to create folders.
Ah that's the node of the story.
I made 2 tries :
 (1) mount the SD card, create a folder "toto", umount
     => when checked in my laptop, no new folder is created
 (2) mount the SD card, create a folder "toto", and copy in it a file "foo.txt",
 umount
     => when checked in my laptop, both the directory and the file *are* there

So I suppose that creating a directory without any file within doesn't trigger
the write on the device.

Thanks for your help.

Cheers.

-- 
Robert

_______________________________________________
barebox mailing list
barebox@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/barebox

^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: FAT filesystem write and long names stability
  2011-12-06 10:01       ` Robert Jarzmik
@ 2011-12-07  8:37         ` Sascha Hauer
  2011-12-13 15:33           ` Robert Jarzmik
  0 siblings, 1 reply; 11+ messages in thread
From: Sascha Hauer @ 2011-12-07  8:37 UTC (permalink / raw)
  To: Robert Jarzmik; +Cc: barebox

On Tue, Dec 06, 2011 at 11:01:37AM +0100, Robert Jarzmik wrote:
> Franck JULLIEN <franck.jullien@gmail.com> writes:
> 
> > 2011/12/5 Robert Jarzmik <robert.jarzmik@free.fr>:
> >> Franck JULLIEN <franck.jullien@gmail.com> writes:
> >>
> >>> Do you have this patch applied to your working branch ? :
> >>>
> >>> fs/fat: Initialize local variable finfo
> >> Hi Franck,
> >>
> >> I cross-checked, and indeed I do not have this fix in my branch, while it sits
> >> in next branch. I'll rebase and make another try.
> Good guess, with that patch no bug :)
> 
> >> Do you by any chance tried the "write" part of FAT ?
> > Yes I did try it and as far as I can tell it works. I wrote some test
> > files to the SD then read it back on the PC and file were there....
> > I don't think I tried to create folders.
> Ah that's the node of the story.
> I made 2 tries :
>  (1) mount the SD card, create a folder "toto", umount
>      => when checked in my laptop, no new folder is created
>  (2) mount the SD card, create a folder "toto", and copy in it a file "foo.txt",
>  umount
>      => when checked in my laptop, both the directory and the file *are* there
> 
> So I suppose that creating a directory without any file within doesn't trigger
> the write on the device.

I had a look at it and the problem seems to be the fat caching layer I
introduced. It brings the fat on disk and in memory out of sync. This
layer has been necessary since without it the performance of the fat
driver is really poor. You could try the following branch. It reverts
the fat cache layer support and instead reimplements the block caching
layer so that it can handle the access patterns of the fat driver
better.
It would be great if you could give it some testing as obviously my test
patterns didn't reveal the 'create folder' bug you described.

Sascha

The following changes since commit 3bb6ee8dd530d01724ceb7c3d5bb68bd1898726a:

  mci: add the probe parameter if any error happened during the probe (2011-12-05 22:05:09 +0100)

are available in the git repository at:
  git://git.pengutronix.de/git/barebox.git pu/block

Sascha Hauer (3):
      list: add list_last_entry function
      fat: revert fat caching mechanism
      block: reimplement caching

 common/block.c       |  274 ++++++++++++++++++++++++++++++++++++-------------
 fs/fat/ff.c          |   93 ++++-------------
 include/block.h      |   16 ++--
 include/linux/list.h |   11 ++
 4 files changed, 241 insertions(+), 153 deletions(-)
-- 
Pengutronix e.K.                           |                             |
Industrial Linux Solutions                 | http://www.pengutronix.de/  |
Peiner Str. 6-8, 31137 Hildesheim, Germany | Phone: +49-5121-206917-0    |
Amtsgericht Hildesheim, HRA 2686           | Fax:   +49-5121-206917-5555 |

_______________________________________________
barebox mailing list
barebox@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/barebox

^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: FAT filesystem write and long names stability
  2011-12-07  8:37         ` Sascha Hauer
@ 2011-12-13 15:33           ` Robert Jarzmik
  2011-12-15  9:28             ` Robert Jarzmik
  0 siblings, 1 reply; 11+ messages in thread
From: Robert Jarzmik @ 2011-12-13 15:33 UTC (permalink / raw)
  To: Sascha Hauer; +Cc: barebox

Sascha Hauer <s.hauer@pengutronix.de> writes:

> On Tue, Dec 06, 2011 at 11:01:37AM +0100, Robert Jarzmik wrote:
> I had a look at it and the problem seems to be the fat caching layer I
> introduced. It brings the fat on disk and in memory out of sync. This
> layer has been necessary since without it the performance of the fat
> driver is really poor. You could try the following branch. It reverts
> the fat cache layer support and instead reimplements the block caching
> layer so that it can handle the access patterns of the fat driver
> better.
> It would be great if you could give it some testing as obviously my test
> patterns didn't reveal the 'create folder' bug you described.
Tomorrow or wednesday, I'll make the few tests I always do (making a
directory, copying a file, deleting a file, etc ...) and report.

As I also happen to use the FAT on SDCard for reading my framebuffer image, and
also to drop MTD content onto the same FAT, I'll tell you my "feeling" about
performance.

Cheers.

--
Robert

_______________________________________________
barebox mailing list
barebox@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/barebox

^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: FAT filesystem write and long names stability
  2011-12-13 15:33           ` Robert Jarzmik
@ 2011-12-15  9:28             ` Robert Jarzmik
  2011-12-19 11:01               ` Sascha Hauer
  0 siblings, 1 reply; 11+ messages in thread
From: Robert Jarzmik @ 2011-12-15  9:28 UTC (permalink / raw)
  To: Sascha Hauer; +Cc: barebox

Robert Jarzmik <robert.jarzmik@free.fr> writes:

> Sascha Hauer <s.hauer@pengutronix.de> writes:
>> It would be great if you could give it some testing as obviously my test
>> patterns didn't reveal the 'create folder' bug you described.
> Tomorrow or wednesday, I'll make the few tests I always do (making a
> directory, copying a file, deleting a file, etc ...) and report.
This is what my tests give back:

**** With FAT caching (barebox.git/next + rjk mioa701 support):
barebox:/sdcard time bmp /sdcard/help.bmp 
time: 6895ms
barebox:/sdcard time cp /sdcard/help.bmp /sdcard/toto.tmp
time: 13278ms
barebox:/sdcard ls -l help.bmp
-rwxrwxrwx     230454 help.bmp
barebox:/sdcard 

**** Without FAT caching (merged pu/block into barebox.git/next + rjk mioa701 support)
barebox:/sdcard time bmp /sdcard/help.bmp
time: 9219ms
barebox:/sdcard time cp /sdcard/help.bmp /sdcard/titi.tmp
BUG: failure at common/block.c:248/block_

The "BUG" thing prevents me from going further. But it seems the cache in main
tree speeds up things. I also think that creating directories without files
serves no purpose I can think of, and is an acceptable tradeoff for the improved
performance.

Cheers.

--
Robert

PS: help.bmp is a converted bmp, 320x480, 24 bpp from :
    http://t0.gstatic.com/images?q=tbn:ANd9GcQssQd1VBKJUde7lZpU49GVwDaZbNGvbDNbrOeSbPrL_MfBkK61SA

_______________________________________________
barebox mailing list
barebox@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/barebox

^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: FAT filesystem write and long names stability
  2011-12-15  9:28             ` Robert Jarzmik
@ 2011-12-19 11:01               ` Sascha Hauer
  2011-12-19 11:14                 ` Sascha Hauer
  0 siblings, 1 reply; 11+ messages in thread
From: Sascha Hauer @ 2011-12-19 11:01 UTC (permalink / raw)
  To: Robert Jarzmik; +Cc: barebox

On Thu, Dec 15, 2011 at 10:28:38AM +0100, Robert Jarzmik wrote:
> Robert Jarzmik <robert.jarzmik@free.fr> writes:
> 
> > Sascha Hauer <s.hauer@pengutronix.de> writes:
> >> It would be great if you could give it some testing as obviously my test
> >> patterns didn't reveal the 'create folder' bug you described.
> > Tomorrow or wednesday, I'll make the few tests I always do (making a
> > directory, copying a file, deleting a file, etc ...) and report.
> This is what my tests give back:
> 
> **** With FAT caching (barebox.git/next + rjk mioa701 support):
> barebox:/sdcard time bmp /sdcard/help.bmp 
> time: 6895ms
> barebox:/sdcard time cp /sdcard/help.bmp /sdcard/toto.tmp
> time: 13278ms
> barebox:/sdcard ls -l help.bmp
> -rwxrwxrwx     230454 help.bmp
> barebox:/sdcard 

There is something wrong. These times are far from being acceptable.

Here's what I get with copying a 2MiB file from SD Card:

barebox@Freescale i.MX51 PDK:/ time cp /fat/x /x
time: 273ms

> 
> **** Without FAT caching (merged pu/block into barebox.git/next + rjk mioa701 support)
> barebox:/sdcard time bmp /sdcard/help.bmp
> time: 9219ms
> barebox:/sdcard time cp /sdcard/help.bmp /sdcard/titi.tmp
> BUG: failure at common/block.c:248/block_

Hm, I don't understand where this can come from.

	data = block_get(blk, block);
	if (!data)
		BUG();

So this bug is triggered when block_get fails:

static void *block_get(struct block_device *blk, int block)
{
	void *outdata;
	int ret;

	if (block >= blk->num_blocks)
		return NULL;

	outdata = block_get_cached(blk, block);
	if (outdata)
		return outdata;

	ret = block_cache(blk, block);
	if (ret)
		return NULL;

	outdata = block_get_cached(blk, block);
	if (!outdata)
		BUG();

	return outdata;
}

So block_get fails when

a) You access some block outside the device (which should have been
   caught earlier
b) block_cache fails. (This indeed can fail when the underlying hardware
   fails to read the block, so the BUG should be replaced with a simple
   error return)

> 
> The "BUG" thing prevents me from going further. But it seems the cache in main
> tree speeds up things. I also think that creating directories without files
> serves no purpose I can think of, and is an acceptable tradeoff for the improved
> performance.

It's not only the creating-directory-without-files thing, The FAT can
become corrupted in current mainline, so we have to do something.

Sascha


-- 
Pengutronix e.K.                           |                             |
Industrial Linux Solutions                 | http://www.pengutronix.de/  |
Peiner Str. 6-8, 31137 Hildesheim, Germany | Phone: +49-5121-206917-0    |
Amtsgericht Hildesheim, HRA 2686           | Fax:   +49-5121-206917-5555 |

_______________________________________________
barebox mailing list
barebox@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/barebox

^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: FAT filesystem write and long names stability
  2011-12-19 11:01               ` Sascha Hauer
@ 2011-12-19 11:14                 ` Sascha Hauer
  2011-12-19 21:03                   ` [PATCH] drivers/mci: pxa fix clockrate Robert Jarzmik
  0 siblings, 1 reply; 11+ messages in thread
From: Sascha Hauer @ 2011-12-19 11:14 UTC (permalink / raw)
  To: Robert Jarzmik; +Cc: barebox

On Mon, Dec 19, 2011 at 12:01:20PM +0100, Sascha Hauer wrote:
> On Thu, Dec 15, 2011 at 10:28:38AM +0100, Robert Jarzmik wrote:
> > Robert Jarzmik <robert.jarzmik@free.fr> writes:
> > 
> > > Sascha Hauer <s.hauer@pengutronix.de> writes:
> > >> It would be great if you could give it some testing as obviously my test
> > >> patterns didn't reveal the 'create folder' bug you described.
> > > Tomorrow or wednesday, I'll make the few tests I always do (making a
> > > directory, copying a file, deleting a file, etc ...) and report.
> > This is what my tests give back:
> > 
> > **** With FAT caching (barebox.git/next + rjk mioa701 support):
> > barebox:/sdcard time bmp /sdcard/help.bmp 
> > time: 6895ms
> > barebox:/sdcard time cp /sdcard/help.bmp /sdcard/toto.tmp
> > time: 13278ms
> > barebox:/sdcard ls -l help.bmp
> > -rwxrwxrwx     230454 help.bmp
> > barebox:/sdcard 
> 
> There is something wrong. These times are far from being acceptable.

BTW Does your SD card work with a proper frequency?

Sascha

-- 
Pengutronix e.K.                           |                             |
Industrial Linux Solutions                 | http://www.pengutronix.de/  |
Peiner Str. 6-8, 31137 Hildesheim, Germany | Phone: +49-5121-206917-0    |
Amtsgericht Hildesheim, HRA 2686           | Fax:   +49-5121-206917-5555 |

_______________________________________________
barebox mailing list
barebox@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/barebox

^ permalink raw reply	[flat|nested] 11+ messages in thread

* [PATCH] drivers/mci: pxa fix clockrate
  2011-12-19 11:14                 ` Sascha Hauer
@ 2011-12-19 21:03                   ` Robert Jarzmik
  0 siblings, 0 replies; 11+ messages in thread
From: Robert Jarzmik @ 2011-12-19 21:03 UTC (permalink / raw)
  To: barebox

The clock rate was incorrectly calculated, leading to a
frequency of 19.5MHz / 64 instead of 19.5Mz for the host
controller.

with the fix applied, a copy of a file of 230 kB shrinks
from 6000ms to 123ms.

Signed-off-by: Robert Jarzmik <robert.jarzmik@free.fr>
---
 drivers/mci/pxamci.c |   14 +++++++++-----
 1 files changed, 9 insertions(+), 5 deletions(-)

diff --git a/drivers/mci/pxamci.c b/drivers/mci/pxamci.c
index 1634a1d..75b61f0 100644
--- a/drivers/mci/pxamci.c
+++ b/drivers/mci/pxamci.c
@@ -161,7 +161,8 @@ static int pxamci_transfer_data(struct pxamci_host *host,
 static void pxamci_start_cmd(struct pxamci_host *host, struct mci_cmd *cmd,
 			     unsigned int cmdat)
 {
-	mci_dbg("cmd=(idx=%d,type=%d)\n", cmd->cmdidx, cmd->resp_type);
+	mci_dbg("cmd=(idx=%d,type=%d,clkrt=%d)\n", cmd->cmdidx, cmd->resp_type,
+		host->clkrt);
 	if (cmd->resp_type & MMC_RSP_BUSY)
 		cmdat |= CMDAT_BUSY;
 
@@ -277,11 +278,14 @@ static void pxamci_set_ios(struct mci_host *mci, struct device_d *dev,
 {
 	struct pxamci_host *host = to_pxamci(mci);
 	unsigned int clk_in = pxa_get_mmcclk();
-	unsigned long fact;
+	int fact;
 
-	mci_dbg("bus_width=%d, clock=%ud\n", bus_width, clock);
-	fact = min_t(int, clock / clk_in, 1);
-	fact = max_t(int, fact, 1 << 6);
+	mci_dbg("bus_width=%d, clock=%u\n", bus_width, clock);
+	if (clock)
+		fact = min_t(int, clk_in / clock, 1 << 6);
+	else
+		fact = 1 << 6;
+	fact = max_t(int, fact, 1);
 
 	/*
 	 * We calculate clkrt here, and will write it on the next command
-- 
1.7.5.4


_______________________________________________
barebox mailing list
barebox@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/barebox

^ permalink raw reply	[flat|nested] 11+ messages in thread

end of thread, other threads:[~2011-12-19 21:03 UTC | newest]

Thread overview: 11+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2011-12-05 17:51 FAT filesystem write and long names stability Robert Jarzmik
2011-12-05 20:03 ` Franck JULLIEN
2011-12-05 20:40   ` Robert Jarzmik
2011-12-05 20:43     ` Franck JULLIEN
2011-12-06 10:01       ` Robert Jarzmik
2011-12-07  8:37         ` Sascha Hauer
2011-12-13 15:33           ` Robert Jarzmik
2011-12-15  9:28             ` Robert Jarzmik
2011-12-19 11:01               ` Sascha Hauer
2011-12-19 11:14                 ` Sascha Hauer
2011-12-19 21:03                   ` [PATCH] drivers/mci: pxa fix clockrate Robert Jarzmik

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox