jffs2: cache data_crc results

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@emcraft.com>
Signed-off-by: Ilya Yanok <yanok@emcraft.com>
master
Ilya Yanok 16 years ago committed by Wolfgang Denk
parent 9b7076229e
commit 142a80ffc3
  1. 5
      fs/jffs2/jffs2_1pass.c
  2. 1
      fs/jffs2/jffs2_private.h

@ -765,7 +765,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;
}

@ -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 {

Loading…
Cancel
Save