diff options
| author | ngkaho1234 <ngkaho1234@gmail.com> | 2015-10-27 07:53:42 +0000 |
|---|---|---|
| committer | ngkaho1234 <ngkaho1234@gmail.com> | 2015-10-27 07:53:42 +0000 |
| commit | 4c6115ffe7fddaab8fa1c12e7cce7c7902ceb36f (patch) | |
| tree | 6059cddc29976126dda7ca406eb9b5dc1c9fdf11 | |
| parent | aea94ae650c9ab0c07e057eaaa86346da603c2d5 (diff) | |
FIX: directory leaf checksum is not assigned correctly.
| -rw-r--r-- | lwext4/ext4_dir.c | 12 |
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; } |
