Update README.md
[lwext4.git] / lwext4 / ext4_extent_full.c
index e7dd00f8d84c0cfa656a5847fc6ceb4d97395df0..b8347f7b54117f3b6edcd9d4beec0c19b87d25c9 100644 (file)
@@ -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);