diff options
Diffstat (limited to 'fs')
| -rw-r--r-- | fs/jffs2/jffs2_1pass.c | 3 | ||||
| -rw-r--r-- | fs/jffs2/jffs2_private.h | 12 | 
2 files changed, 14 insertions, 1 deletions
| diff --git a/fs/jffs2/jffs2_1pass.c b/fs/jffs2/jffs2_1pass.c index 6361d06d2..49c86524c 100644 --- a/fs/jffs2/jffs2_1pass.c +++ b/fs/jffs2/jffs2_1pass.c @@ -1171,7 +1171,8 @@ jffs2_1pass_build_lists(struct part_info * part)  		if (node->magic == JFFS2_MAGIC_BITMASK && hdr_crc(node)) {  			/* if its a fragment add it */  			if (node->nodetype == JFFS2_NODETYPE_INODE && -				    inode_crc((struct jffs2_raw_inode *) node)) { +				    inode_crc((struct jffs2_raw_inode *) node) && +				    data_crc((struct jffs2_raw_inode *) node)) {  				if (insert_node(&pL->frag, (u32) part->offset +  						offset) == NULL) {  					put_fl_mem(node); diff --git a/fs/jffs2/jffs2_private.h b/fs/jffs2/jffs2_private.h index 65ca6eb98..3e1fff473 100644 --- a/fs/jffs2/jffs2_private.h +++ b/fs/jffs2/jffs2_private.h @@ -85,4 +85,16 @@ inode_crc(struct jffs2_raw_inode *node)  	}  } +static inline int +data_crc(struct jffs2_raw_inode *node) +{ +	if (node->data_crc != crc32_no_comp(0, (unsigned char *) +                                            ((int) &node->node_crc + sizeof (node->node_crc)), +                                             node->csize)) { +		return 0; +	} else { +		return 1; +	} +} +  #endif /* jffs2_private.h */ |