From 622abd1c2f93e197eec080603b35a6aa48a6bebe Mon Sep 17 00:00:00 2001 From: ngkaho1234 Date: Sun, 1 Nov 2015 14:11:35 +0000 Subject: ext4_fs_inode_checksum: fix checksum calculation If inode size is not large enough to hold 32bit checksum, then return lower 16bit. --- lwext4/ext4_fs.c | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/lwext4/ext4_fs.c b/lwext4/ext4_fs.c index 3cbce8f..c1bc25f 100644 --- a/lwext4/ext4_fs.c +++ b/lwext4/ext4_fs.c @@ -700,6 +700,12 @@ static uint32_t ext4_fs_inode_checksum(struct ext4_inode_ref *inode_ref) inode_size); ext4_inode_set_checksum(sb, inode_ref->inode, orig_checksum); + + /* If inode size is not large enough to hold the + * upper 16bit of the checksum */ + if (inode_size == EXT4_GOOD_OLD_INODE_SIZE) + checksum &= 0xFFFF; + } return checksum; } -- cgit v1.2.3