projects
/
lwext4.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Update README.md
[lwext4.git]
/
lwext4
/
ext4_extent_full.c
diff --git
a/lwext4/ext4_extent_full.c
b/lwext4/ext4_extent_full.c
index e7dd00f8d84c0cfa656a5847fc6ceb4d97395df0..b8347f7b54117f3b6edcd9d4beec0c19b87d25c9 100644
(file)
--- 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;
}
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)
{
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 */
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,
/* 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;
}
}
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;
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;
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;
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);
}
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))) {
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);
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);
/* 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);
}
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);
bh.dirty = true;
inode_ref->dirty = true;
ext4_block_set(inode_ref->fs->bdev, &bh);