diff options
| author | ngkaho1234 <ngkaho1234@gmail.com> | 2015-10-27 09:49:31 +0000 |
|---|---|---|
| committer | ngkaho1234 <ngkaho1234@gmail.com> | 2015-10-27 09:49:31 +0000 |
| commit | 2aa6b585955b0133b6191f7a387e41ead358f136 (patch) | |
| tree | d0eaa3d59903a0c8b3f1ba59e6870162f318ac60 | |
| parent | 79c8c98207d3267e94ca7cbf2c720c1f86951b85 (diff) | |
FIX: directory HTree node checksum is not assigned correctly.
| -rw-r--r-- | lwext4/ext4_dir_idx.c | 8 |
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); |
