dumpe2fs: print the expected block group checksum if it is incorrect

This helps to diagnose problems caused by incorrect block group
checksums.

Signed-off-by: "Theodore Ts'o" <tytso@mit.edu>
bitmap-optimize
Theodore Ts'o 2012-03-15 12:13:25 -04:00
parent def8da3829
commit 87141781aa
4 changed files with 12 additions and 4 deletions

View File

@ -259,6 +259,7 @@ libext2fs.so.2 e2fslibs #MINVER#
ext2fs_get_pathname@Base 1.37
ext2fs_get_rec_len@Base 1.41.7
ext2fs_group_blocks_count@Base 1.42
ext2fs_group_desc_csum@Base 1.42.2
ext2fs_group_desc@Base 1.42
ext2fs_group_desc_csum_set@Base 1.41.0
ext2fs_group_desc_csum_verify@Base 1.41.0

View File

@ -30,7 +30,7 @@
#define STATIC static
#endif
STATIC __u16 ext2fs_group_desc_csum(ext2_filsys fs, dgrp_t group)
__u16 ext2fs_group_desc_csum(ext2_filsys fs, dgrp_t group)
{
__u16 crc = 0;
struct ext2_group_desc *desc;

View File

@ -947,6 +947,7 @@ extern __u32 ext2fs_crc32c_le(__u32 crc, unsigned char const *p, size_t len);
extern void ext2fs_group_desc_csum_set(ext2_filsys fs, dgrp_t group);
extern int ext2fs_group_desc_csum_verify(ext2_filsys fs, dgrp_t group);
extern errcode_t ext2fs_set_gdt_csum(ext2_filsys fs);
extern __u16 ext2fs_group_desc_csum(ext2_filsys fs, dgrp_t group);
/* dblist.c */

View File

@ -190,10 +190,16 @@ static void list_desc (ext2_filsys fs)
print_range(first_block, last_block);
fputs(")", stdout);
print_bg_opts(fs, i);
if (fs->super->s_feature_ro_compat & EXT4_FEATURE_RO_COMPAT_GDT_CSUM)
printf(_(" Checksum 0x%04x, unused inodes %u\n"),
ext2fs_bg_checksum(fs, i),
if (fs->super->s_feature_ro_compat & EXT4_FEATURE_RO_COMPAT_GDT_CSUM) {
unsigned csum = ext2fs_bg_checksum(fs, i);
unsigned exp_csum = ext2fs_group_desc_csum(fs, i);
printf(_(" Checksum 0x%04x"), csum);
if (csum != exp_csum)
printf(_(" (EXPECTED 0x%04x)"), exp_csum);
printf(_(", unused inodes %u\n"),
ext2fs_bg_itable_unused(fs, i));
}
has_super = ((i==0) || super_blk);
if (has_super) {
printf (_(" %s superblock at "),