[U-Boot] [PATCH] jffs2: cache data_crc results

Ilya Yanok yanok at emcraft.com
Mon Oct 13 07:53:53 CEST 2008


As we moved data_crc() invocation from jffs2_1pass_build_lists() to
jffs2_1pass_read_inode() data_crc is going to be calculated on each
inode access. This patch adds caching of data_crc() results. There
is no significant improvement in speed (because of flash access
caching added in previous patch I think, crc in RAM is really fast)
but this patch impacts memory usage -- every b_node structure uses
12 bytes instead of 8.

Signed-off-by: Alexey Neyman <avn at emcraft.com>
Signed-off-by: Ilya Yanok <yanok at emcraft.com>
---
 fs/jffs2/jffs2_1pass.c   |    5 ++++-
 fs/jffs2/jffs2_private.h |    1 +
 2 files changed, 5 insertions(+), 1 deletions(-)

diff --git a/fs/jffs2/jffs2_1pass.c b/fs/jffs2/jffs2_1pass.c
index 9d9ac1a..b41c299 100644
--- a/fs/jffs2/jffs2_1pass.c
+++ b/fs/jffs2/jffs2_1pass.c
@@ -768,7 +768,10 @@ jffs2_1pass_read_inode(struct b_lists *pL, u32 inode, char *dest)
 					put_fl_mem(jNode, pL->readbuf);
 					continue;
 				}
-				if (!data_crc(jNode)) {
+				if (b->datacrc == CRC_UNKNOWN)
+					b->datacrc = data_crc(jNode) ?
+						CRC_OK : CRC_BAD;
+				if (b->datacrc == CRC_BAD) {
 					put_fl_mem(jNode, pL->readbuf);
 					continue;
 				}
diff --git a/fs/jffs2/jffs2_private.h b/fs/jffs2/jffs2_private.h
index b3fab1c..7a9eda6 100644
--- a/fs/jffs2/jffs2_private.h
+++ b/fs/jffs2/jffs2_private.h
@@ -7,6 +7,7 @@
 struct b_node {
 	u32 offset;
 	struct b_node *next;
+	enum { CRC_UNKNOWN = 0, CRC_OK, CRC_BAD } datacrc;
 };
 
 struct b_list {
-- 
1.5.6.1



More information about the U-Boot mailing list