e2fsck: print the current and expected block group checksums

Signed-off-by: "Theodore Ts'o" <tytso@mit.edu>
bitmap-optimize
Theodore Ts'o 2012-03-15 19:29:19 -04:00
parent 0f5676f202
commit b9a64a519a
6 changed files with 15 additions and 6 deletions

View File

@ -500,13 +500,19 @@ static _INLINE_ void expand_percent_expression(ext2_filsys fs, char ch,
case 'T': case 'T':
print_time(e2fsck_ctx ? e2fsck_ctx->now : time(0)); print_time(e2fsck_ctx ? e2fsck_ctx->now : time(0));
break; break;
case 'x':
printf("0x%0*x", width, ctx->csum1);
break;
case 'X': case 'X':
#ifdef EXT2_NO_64_TYPE #ifdef EXT2_NO_64_TYPE
printf("0x%*x", width, ctx->num); printf("0x%0*x", width, ctx->num);
#else #else
printf("0x%*llx", width, (long long)ctx->num); printf("0x%0*llx", width, (long long)ctx->num);
#endif #endif
break; break;
case 'y':
printf("0x%0*x", width, ctx->csum2);
break;
default: default:
no_context: no_context:
printf("%%%c", ch); printf("%%%c", ch);

View File

@ -354,7 +354,7 @@ static struct e2fsck_problem problem_table[] = {
/* group descriptor N checksum is invalid. */ /* group descriptor N checksum is invalid. */
{ PR_0_GDT_CSUM, { PR_0_GDT_CSUM,
N_("@g descriptor %g checksum is invalid. "), N_("@g descriptor %g checksum is %04x, should be %04y. "),
PROMPT_FIX, PR_LATCH_BG_CHECKSUM }, PROMPT_FIX, PR_LATCH_BG_CHECKSUM },
/* group descriptor N marked uninitialized without feature set. */ /* group descriptor N marked uninitialized without feature set. */

View File

@ -19,6 +19,7 @@ struct problem_context {
blk64_t blk, blk2; blk64_t blk, blk2;
e2_blkcnt_t blkcount; e2_blkcnt_t blkcount;
int group; int group;
__u32 csum1, csum2;
__u64 num; __u64 num;
const char *str; const char *str;
}; };

View File

@ -635,6 +635,8 @@ void check_super_block(e2fsck_t ctx)
should_be = 0; should_be = 0;
if (!ext2fs_group_desc_csum_verify(fs, i)) { if (!ext2fs_group_desc_csum_verify(fs, i)) {
pctx.csum1 = ext2fs_bg_checksum(fs, i);
pctx.csum2 = ext2fs_group_desc_csum(fs, i);
if (fix_problem(ctx, PR_0_GDT_CSUM, &pctx)) { if (fix_problem(ctx, PR_0_GDT_CSUM, &pctx)) {
ext2fs_bg_flags_clear(fs, i, EXT2_BG_BLOCK_UNINIT); ext2fs_bg_flags_clear(fs, i, EXT2_BG_BLOCK_UNINIT);
ext2fs_bg_flags_clear(fs, i, EXT2_BG_INODE_UNINIT); ext2fs_bg_flags_clear(fs, i, EXT2_BG_INODE_UNINIT);

View File

@ -8,7 +8,7 @@ Relocating group 1's inode table to 142...
Restarting e2fsck from the beginning... Restarting e2fsck from the beginning...
One or more block group descriptor checksums are invalid. Fix? yes One or more block group descriptor checksums are invalid. Fix? yes
Group descriptor 1 checksum is invalid. FIXED. Group descriptor 1 checksum is 0x1cee, should be 0xf809. FIXED.
Pass 1: Checking inodes, blocks, and sizes Pass 1: Checking inodes, blocks, and sizes
Pass 2: Checking directory structure Pass 2: Checking directory structure
Pass 3: Checking directory connectivity Pass 3: Checking directory connectivity

View File

@ -9,8 +9,8 @@ Fix? yes
Restarting e2fsck from the beginning... Restarting e2fsck from the beginning...
One or more block group descriptor checksums are invalid. Fix? yes One or more block group descriptor checksums are invalid. Fix? yes
Group descriptor 0 checksum is invalid. FIXED. Group descriptor 0 checksum is 0x289d, should be 0x788a. FIXED.
Group descriptor 1 checksum is invalid. FIXED. Group descriptor 1 checksum is 0xfaab, should be 0x3a9a. FIXED.
Pass 1: Checking inodes, blocks, and sizes Pass 1: Checking inodes, blocks, and sizes
Pass 2: Checking directory structure Pass 2: Checking directory structure
Pass 3: Checking directory connectivity Pass 3: Checking directory connectivity