summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorngkaho1234 <ngkaho1234@gmail.com>2015-10-27 09:49:31 +0000
committerngkaho1234 <ngkaho1234@gmail.com>2015-10-27 09:49:31 +0000
commit2aa6b585955b0133b6191f7a387e41ead358f136 (patch)
treed0eaa3d59903a0c8b3f1ba59e6870162f318ac60
parent79c8c98207d3267e94ca7cbf2c720c1f86951b85 (diff)
FIX: directory HTree node checksum is not assigned correctly.
-rw-r--r--lwext4/ext4_dir_idx.c8
1 files changed, 8 insertions, 0 deletions
diff --git a/lwext4/ext4_dir_idx.c b/lwext4/ext4_dir_idx.c
index 12fb03c..39d2eb3 100644
--- a/lwext4/ext4_dir_idx.c
+++ b/lwext4/ext4_dir_idx.c
@@ -401,6 +401,7 @@ int ext4_dir_dx_init(struct ext4_inode_ref *dir, struct ext4_inode_ref *parent)
if (ext4_sb_has_feature_read_only(sb,
EXT4_FEATURE_RO_COMPAT_METADATA_CSUM))
entry_space -= sizeof(struct ext4_directory_dx_tail);
+
uint16_t root_limit =
entry_space / sizeof(struct ext4_directory_dx_entry);
@@ -498,6 +499,9 @@ static int ext4_dir_hinfo_init(struct ext4_hash_info *hinfo,
uint32_t entry_space = block_size;
entry_space -= 2 * sizeof(struct ext4_directory_dx_dot_entry);
entry_space -= sizeof(struct ext4_directory_dx_root_info);
+ if (ext4_sb_has_feature_read_only(sb,
+ EXT4_FEATURE_RO_COMPAT_METADATA_CSUM))
+ entry_space -= sizeof(struct ext4_directory_dx_tail);
entry_space = entry_space / sizeof(struct ext4_directory_dx_entry);
uint16_t limit = ext4_dir_dx_countlimit_get_limit(
@@ -614,6 +618,10 @@ static int ext4_dir_dx_get_leaf(struct ext4_hash_info *hinfo,
ext4_sb_get_block_size(&inode_ref->fs->sb) -
sizeof(struct ext4_fake_directory_entry);
+ if (ext4_sb_has_feature_read_only(&inode_ref->fs->sb,
+ EXT4_FEATURE_RO_COMPAT_METADATA_CSUM))
+ entry_space -= sizeof(struct ext4_directory_dx_tail);
+
entry_space =
entry_space / sizeof(struct ext4_directory_dx_entry);