ext2fs_free_block_bitmap(ctx->block_metadata_map);
ctx->block_metadata_map = 0;
+ if (ctx->flags & E2F_FLAG_EXPAND_EISIZE) {
+ int min_extra_isize;
+
+ if (!ctx->expand_eisize_map)
+ goto set_min_extra_isize;
+
+ for (pctx.ino = 1; pctx.ino < ctx->fs->super->s_inodes_count;
+ pctx.ino++) {
+ if (ext2fs_test_inode_bitmap2(ctx->expand_eisize_map,
+ pctx.ino)) {
+ fix_problem(ctx, PR_5_EXPAND_EISIZE, &pctx);
+ ext2fs_expand_extra_isize(ctx->fs, pctx.ino, 0,
+ ctx->want_extra_isize,
+ NULL, NULL);
+ }
+ }
+ ext2fs_free_inode_bitmap(ctx->expand_eisize_map);
+
+set_min_extra_isize:
+ if (ctx->fs->super->s_min_extra_isize)
+ min_extra_isize = ctx->fs->super->s_min_extra_isize;
+ else
+ min_extra_isize = ctx->want_extra_isize;
+ if (ctx->min_extra_isize >= min_extra_isize &&
+ !ctx->fs_unexpanded_inodes) {
+ ctx->fs->super->s_min_extra_isize =ctx->min_extra_isize;
+ ctx->fs->super->s_feature_ro_compat |=
+ EXT4_FEATURE_RO_COMPAT_EXTRA_ISIZE;
+ } else {
+ ctx->fs->super->s_min_extra_isize = 0;
+ ctx->fs->super->s_feature_ro_compat &=
+ ~EXT4_FEATURE_RO_COMPAT_EXTRA_ISIZE;
+ }
+ ext2fs_mark_super_dirty(ctx->fs);
+ }
+
print_resource_track(ctx, _("Pass 5"), &rtrack, ctx->fs->io);
}
clear_problem_context(&pctx);
- end = EXT2_INODES_PER_GROUP(fs->super) * fs->group_desc_count;
+ end = (__u64)EXT2_INODES_PER_GROUP(fs->super) * fs->group_desc_count;
pctx.errcode = ext2fs_fudge_inode_bitmap_end(fs->inode_map, end,
&save_inodes_count);
if (pctx.errcode) {
/* protect loop from wrap-around if end is maxed */
for (i = save_inodes_count + 1; i <= end && i > save_inodes_count; i++) {
- if (!ext2fs_test_inode_bitmap(fs->inode_map, i)) {
+ if (!ext2fs_test_inode_bitmap2(fs->inode_map, i)) {
asked = 1;
if (fix_problem(ctx, PR_5_INODE_BMAP_PADDING, &pctx)) {
for (; i <= end; i++)
- ext2fs_mark_inode_bitmap(fs->inode_map,
+ ext2fs_mark_inode_bitmap2(fs->inode_map,
i);
ext2fs_mark_ib_dirty(fs);
} else
* be written back to disk.
*/
check_intra_bg_tail:
- if (!asked && fs->flags & EXT2_FLAG_IBITMAP_TAIL_PROBLEM)
+ if (!asked && fs->flags & EXT2_FLAG_IBITMAP_TAIL_PROBLEM) {
if (fix_problem(ctx, PR_5_INODE_BMAP_PADDING, &pctx))
ext2fs_mark_ib_dirty(fs);
else
ext2fs_unmark_valid(fs);
+ }
}
static void check_block_end(e2fsck_t ctx)