
Hello Michael,
Michael Lawnick wrote:
I have put these patches to our board (MPC8548, NOR Flash, MTD partition size 48MB).
a) performance has improved (execution time of 'ls' reduced from ~16s to ~1.5s)
Sounds good. That is what we were expecting.
b) there is a bug in the patch 0005-jffs2-add-buffer-to-cache-flash-accesses: The passage
@@ -724,12 +731,14 @@ jffs2_1pass_read_inode(struct b_lists *pL, u32 inode, char *dest) latestVersion = jNode->version; } }
put_fl_mem(jNode);
if (pL->readbuf == NULL)
}put_fl_mem(jNode);
#endif
should be
@@ -724,12 +731,14 @@ jffs2_1pass_read_inode(struct b_lists *pL, u32 inode, char *dest) latestVersion = jNode->version; } }
put_fl_mem(jNode);
if (pL->readbuf == NULL)
}put_fl_mem(jNode, NULL);
#endif
You are right. We haven't just tried to use CFG_JFFS2_SORT_FRAGMENTS...
c) I found no improvement with CFG_JFFS2_SORT_FRAGMENTS set (the way I detected b) ;-)
Same as above... We don't use CFG_JFFS2_SORT_FRAGMENTS... But it's very sad result really... I have no idea what is wrong with it...
d) output of 'ls' is corrupted: no date and access right output, directories in / are shown multiple times
Can you please be more specific on this? Is this with CFG_JFFS2_SORT_FRAGMENTS enabled or not? How did you create your FS? I can't reproduce any of described symptoms on our system...
The only thing I can tell you for now is that the first patch from my posting is wrong, the following patch fixes the problem:
From 38d2055f7b493af858c96d1db2aa5cef78adeae1 Mon Sep 17 00:00:00 2001
From: Ilya Yanok yanok@emcraft.com Date: Wed, 15 Oct 2008 16:22:35 +0200 Subject: jffs2: fix sector_size calculation in case of NOR flash
Need to take all sectors into account then calculating sector_size for NOR flashes.
Signed-off-by: Ilya Yanok yanok@emcraft.com --- common/cmd_jffs2.c | 9 ++++++--- 1 files changed, 6 insertions(+), 3 deletions(-)
diff --git a/common/cmd_jffs2.c b/common/cmd_jffs2.c index e7f07bf..2fc0b7d 100644 --- a/common/cmd_jffs2.c +++ b/common/cmd_jffs2.c @@ -344,7 +344,9 @@ static int part_validate_nor(struct mtdids *id, struct part_info *part)
flash = &flash_info[id->num];
- part->sector_size = 0; + /* size of last sector */ + part->sector_size = flash->size - + (flash->start[flash->sector_count-1] - flash->start[0]);
offset_aligned = 0; for (i = 0; i < flash->sector_count; i++) { @@ -360,6 +362,7 @@ static int part_validate_nor(struct mtdids *id, struct part_info *part) }
end_offset = part->offset + part->size; + offset_aligned = 0; for (i = 0; i < flash->sector_count; i++) { if (i) { sector_size = flash->start[i] - flash->start[i-1]; @@ -367,10 +370,10 @@ static int part_validate_nor(struct mtdids *id, struct part_info *part) part->sector_size = sector_size; } if ((flash->start[i] - flash->start[0]) == end_offset) - return 0; + offset_aligned = 1; }
- if (flash->size == end_offset) + if (offset_aligned || flash->size == end_offset) return 0;
printf("%s%d: partition (%s) size alignment incorrect\n",