X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=lwext4%2Fext4_extent_full.c;h=b8347f7b54117f3b6edcd9d4beec0c19b87d25c9;hb=4e32e2da452116b1cc8f79902fb7ea704726557f;hp=e7dd00f8d84c0cfa656a5847fc6ceb4d97395df0;hpb=e0099ab67ad94cce497c1a04da78511344dafc31;p=lwext4.git diff --git a/lwext4/ext4_extent_full.c b/lwext4/ext4_extent_full.c index e7dd00f..b8347f7 100644 --- a/lwext4/ext4_extent_full.c +++ b/lwext4/ext4_extent_full.c @@ -309,6 +309,7 @@ static ext4_fsblk_t ext4_ext_new_meta_block(struct ext4_inode_ref *inode_ref, return newblock; } +#if CONFIG_META_CSUM_ENABLE static uint32_t ext4_ext_block_csum(struct ext4_inode_ref *inode_ref, struct ext4_extent_header *eh) { @@ -320,7 +321,8 @@ static uint32_t ext4_ext_block_csum(struct ext4_inode_ref *inode_ref, 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)); + checksum = ext4_crc32c(EXT4_CRC32_INIT, sb->uuid, + sizeof(sb->uuid)); /* Then calculate crc32 checksum against inode number * and inode generation */ checksum = ext4_crc32c(checksum, &ino_index, @@ -334,8 +336,11 @@ static uint32_t ext4_ext_block_csum(struct ext4_inode_ref *inode_ref, } return checksum; } +#else +#define ext4_ext_block_csum(...) 0 +#endif -static void ext4_extent_block_csum_set(struct ext4_inode_ref *inode_ref, +static void ext4_extent_block_csum_set(struct ext4_inode_ref *inode_ref __unused, struct ext4_extent_header *eh) { struct ext4_extent_tail *tail; @@ -387,6 +392,7 @@ static int ext4_ext_check(struct ext4_inode_ref *inode_ref, ext4_fsblk_t pblk __unused) { struct ext4_extent_tail *tail; + struct ext4_sblock *sb = &inode_ref->fs->sb; const char *error_msg; (void)error_msg; @@ -408,10 +414,13 @@ static int ext4_ext_check(struct ext4_inode_ref *inode_ref, } tail = find_ext4_extent_tail(eh); - struct ext4_sblock *sb = &inode_ref->fs->sb; if (ext4_sb_feature_ro_com(sb, EXT4_FRO_COM_METADATA_CSUM)) { if (tail->et_checksum != to_le32(ext4_ext_block_csum(inode_ref, eh))) { - /* FIXME: Warning: extent checksum damaged? */ + ext4_dbg(DEBUG_EXTENT, + DBG_WARN "Extent block checksum failed." + "Blocknr: %" PRIu64"\n", + pblk); + } } @@ -1142,6 +1151,7 @@ static int ext4_ext_grow_indepth(struct ext4_inode_ref *inode_ref, to_le16(ext4_ext_space_block(inode_ref)); neh->magic = to_le16(EXT4_EXTENT_MAGIC); + ext4_extent_block_csum_set(inode_ref, neh); /* Update top-level index: num,max,pointer */ neh = ext_inode_hdr(inode_ref->inode); @@ -1156,7 +1166,6 @@ static int ext4_ext_grow_indepth(struct ext4_inode_ref *inode_ref, } neh->depth = to_le16(to_le16(neh->depth) + 1); - ext4_extent_block_csum_set(inode_ref, neh); bh.dirty = true; inode_ref->dirty = true; ext4_block_set(inode_ref->fs->bdev, &bh);