}
if (sb->s_feature_ro_compat & EXT4_FEATURE_RO_COMPAT_GDT_CSUM &&
- !(ctx->options & E2F_OPT_READONLY))
- ext2fs_set_gdt_csum(ctx->fs);
+ !(ctx->options & E2F_OPT_READONLY)) {
+ retval = ext2fs_set_gdt_csum(ctx->fs);
+ if (retval) {
+ com_err(ctx->program_name, retval,
+ _("while setting block group checksum info"));
+ fatal_error(ctx, 0);
+ }
+ }
e2fsck_write_bitmaps(ctx);
#ifdef RESOURCE_TRACK
/* update the bitmap flags, set the itable high watermark, and calculate
* checksums for the group descriptors */
-void ext2fs_set_gdt_csum(ext2_filsys fs)
+errcode_t ext2fs_set_gdt_csum(ext2_filsys fs)
{
struct ext2_super_block *sb = fs->super;
struct ext2_group_desc *bg = fs->group_desc;
int blks, csum_flag, dirty = 0;
dgrp_t i;
+ if (!fs->inode_map)
+ return EXT2_ET_NO_INODE_BITMAP;
+
csum_flag = EXT2_HAS_RO_COMPAT_FEATURE(fs->super,
EXT4_FEATURE_RO_COMPAT_GDT_CSUM);
if (!EXT2_HAS_COMPAT_FEATURE(fs->super,
EXT2_FEATURE_COMPAT_LAZY_BG) && !csum_flag)
- return;
+ return 0;
for (i = 0; i < fs->group_desc_count; i++, bg++) {
int old_csum = bg->bg_checksum;
}
if (dirty)
ext2fs_mark_super_dirty(fs);
+ return 0;
}
/* csum.c */
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 void ext2fs_set_gdt_csum(ext2_filsys fs);
+extern errcode_t ext2fs_set_gdt_csum(ext2_filsys fs);
/* dblist.c */
}
no_journal:
- if (!super_only)
- ext2fs_set_gdt_csum(fs);
+ if (!super_only) {
+ retval = ext2fs_set_gdt_csum(fs);
+ if (retval) {
+ com_err(program_name, retval,
+ _("\n\twhile setting block group checksum info"));
+ exit(1);
+ }
+ }
if (!quiet)
printf(_("Writing superblocks and "
"filesystem accounting information: "));