summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorngkaho1234 <ngkaho1234@gmail.com>2015-10-27 07:53:42 +0000
committerngkaho1234 <ngkaho1234@gmail.com>2015-10-27 07:53:42 +0000
commit4c6115ffe7fddaab8fa1c12e7cce7c7902ceb36f (patch)
tree6059cddc29976126dda7ca406eb9b5dc1c9fdf11
parentaea94ae650c9ab0c07e057eaaa86346da603c2d5 (diff)
FIX: directory leaf checksum is not assigned correctly.
-rw-r--r--lwext4/ext4_dir.c12
1 files changed, 11 insertions, 1 deletions
diff --git a/lwext4/ext4_dir.c b/lwext4/ext4_dir.c
index 4d68d8d..5091e6d 100644
--- a/lwext4/ext4_dir.c
+++ b/lwext4/ext4_dir.c
@@ -74,9 +74,19 @@ static uint32_t ext4_dir_checksum(struct ext4_inode_ref *inode_ref,
{
uint32_t checksum;
struct ext4_sblock *sb = &inode_ref->fs->sb;
+ uint32_t ino_index = to_le32(inode_ref->index);
+ uint32_t ino_gen =
+ to_le32(ext4_inode_get_generation(inode_ref->inode));
+
/* First calculate crc32 checksum against fs uuid */
checksum = ext4_crc32c(~0, sb->uuid, sizeof(sb->uuid));
- /* Then calculate crc32 checksum against directory entries */
+ /* Then calculate crc32 checksum against inode number
+ * and inode generation */
+ checksum = ext4_crc32c(checksum, &ino_index,
+ sizeof(ino_index));
+ checksum = ext4_crc32c(checksum, &ino_gen,
+ sizeof(ino_gen));
+ /* Finally calculate crc32 checksum against directory entries */
checksum = ext4_crc32c(checksum, dirent, size);
return checksum;
}