fputs("\n", f);
}
-static void print_bg_opts(struct ext2_group_desc *gdp, int mask,
+static void print_bg_opts(ext2_filsys fs, dgrp_t group, int mask,
const char *str, int *first, FILE *f)
{
- if (gdp->bg_flags & mask) {
+ if (ext2fs_bg_flag_test(fs, group, mask)) {
if (*first) {
fputs(" [", f);
*first = 0;
gdp->bg_itable_unused,
gdp->bg_itable_unused != 1 ? "inodes":"inode");
first = 1;
- print_bg_opts(gdp, EXT2_BG_INODE_UNINIT, "Inode not init",
+ print_bg_opts(current_fs, i, EXT2_BG_INODE_UNINIT, "Inode not init",
&first, out);
- print_bg_opts(gdp, EXT2_BG_BLOCK_UNINIT, "Block not init",
+ print_bg_opts(current_fs, i, EXT2_BG_BLOCK_UNINIT, "Block not init",
&first, out);
if (gdt_csum) {
fprintf(out, "%sChecksum 0x%04x",
* we could call a function in pass1.c that checks the
* newly visible inodes.
*/
- if (fs->group_desc[group].bg_flags & EXT2_BG_INODE_UNINIT) {
+ if (ext2fs_bg_flag_test(fs, group, EXT2_BG_INODE_UNINIT)) {
pctx.num = dirent->inode;
if (fix_problem(ctx, PR_2_INOREF_BG_INO_UNINIT,
&cd->pctx)){
- fs->group_desc[group].bg_flags &=
- ~EXT2_BG_INODE_UNINIT;
+ ext2fs_bg_flag_clear(fs, group,
+ EXT2_BG_INODE_UNINIT);
ext2fs_mark_super_dirty(fs);
ctx->flags |= E2F_FLAG_RESTART_LATER;
} else {
save_problem = 0;
pctx.blk = pctx.blk2 = NO_BLK;
if (csum_flag &&
- (fs->group_desc[group].bg_flags & EXT2_BG_BLOCK_UNINIT))
+ (ext2fs_bg_flag_test(fs, group, EXT2_BG_BLOCK_UNINIT)))
skip_group++;
for (i = fs->super->s_first_data_block;
i < fs->super->s_blocks_count;
pctx2.blk = i;
pctx2.group = group;
if (fix_problem(ctx, PR_5_BLOCK_UNINIT,&pctx2)){
- fs->group_desc[group].bg_flags &=
- ~EXT2_BG_BLOCK_UNINIT;
+ ext2fs_bg_flag_clear(fs, group, EXT2_BG_BLOCK_UNINIT)
+ ;
skip_group = 0;
}
}
goto errout;
if (csum_flag &&
(i != fs->super->s_blocks_count-1) &&
- (fs->group_desc[group].bg_flags &
- EXT2_BG_BLOCK_UNINIT))
+ ext2fs_bg_flag_test(fs, group,
+ EXT2_BG_BLOCK_UNINIT))
skip_group++;
}
}
save_problem = 0;
pctx.ino = pctx.ino2 = 0;
if (csum_flag &&
- (fs->group_desc[group].bg_flags & EXT2_BG_INODE_UNINIT))
+ (ext2fs_bg_flag_test(fs, group, EXT2_BG_INODE_UNINIT)))
skip_group++;
/* Protect loop from wrap-around if inodes_count is maxed */
pctx2.blk = i;
pctx2.group = group;
if (fix_problem(ctx, PR_5_INODE_UNINIT,&pctx2)){
- fs->group_desc[group].bg_flags &=
- ~EXT2_BG_INODE_UNINIT;
+ ext2fs_bg_flag_clear(fs, group, EXT2_BG_INODE_UNINIT)
+ ;
skip_group = 0;
}
}
goto errout;
if (csum_flag &&
(i != fs->super->s_inodes_count) &&
- (fs->group_desc[group].bg_flags &
- EXT2_BG_INODE_UNINIT))
+ (ext2fs_bg_flag_test(fs, group, EXT2_BG_INODE_UNINIT)
+ ))
skip_group++;
}
}
should_be = 0;
if (!ext2fs_group_desc_csum_verify(fs, i)) {
if (fix_problem(ctx, PR_0_GDT_CSUM, &pctx)) {
- gd->bg_flags &= ~(EXT2_BG_BLOCK_UNINIT |
- EXT2_BG_INODE_UNINIT);
+ ext2fs_bg_flag_clear (fs, i, EXT2_BG_BLOCK_UNINIT);
+ ext2fs_bg_flag_clear (fs, i, EXT2_BG_INODE_UNINIT);
gd->bg_itable_unused = 0;
should_be = 1;
}
}
if (!csum_flag &&
- (gd->bg_flags &(EXT2_BG_BLOCK_UNINIT|EXT2_BG_INODE_UNINIT)||
+ (ext2fs_bg_flag_test(fs, i, EXT2_BG_BLOCK_UNINIT) ||
+ ext2fs_bg_flag_test(fs, i, EXT2_BG_INODE_UNINIT) ||
gd->bg_itable_unused != 0)){
if (fix_problem(ctx, PR_0_GDT_UNINIT, &pctx)) {
- gd->bg_flags &= ~(EXT2_BG_BLOCK_UNINIT |
- EXT2_BG_INODE_UNINIT);
+ ext2fs_bg_flag_clear (fs, i, EXT2_BG_BLOCK_UNINIT);
+ ext2fs_bg_flag_clear (fs, i, EXT2_BG_INODE_UNINIT);
gd->bg_itable_unused = 0;
should_be = 1;
}
}
if (i == fs->group_desc_count - 1 &&
- gd->bg_flags & EXT2_BG_BLOCK_UNINIT) {
+ ext2fs_bg_flag_test(fs, i, EXT2_BG_BLOCK_UNINIT)) {
if (fix_problem(ctx, PR_0_BB_UNINIT_LAST, &pctx)) {
- gd->bg_flags &= ~EXT2_BG_BLOCK_UNINIT;
+ ext2fs_bg_flag_clear (fs, i, EXT2_BG_BLOCK_UNINIT);
should_be = 1;
}
ext2fs_unmark_valid(fs);
}
- if (gd->bg_flags & EXT2_BG_BLOCK_UNINIT &&
- !(gd->bg_flags & EXT2_BG_INODE_UNINIT)) {
+ if (ext2fs_bg_flag_test(fs, i, EXT2_BG_BLOCK_UNINIT) &&
+ !ext2fs_bg_flag_test(fs, i, EXT2_BG_INODE_UNINIT)) {
if (fix_problem(ctx, PR_0_BB_UNINIT_IB_INIT, &pctx)) {
- gd->bg_flags &= ~EXT2_BG_BLOCK_UNINIT;
+ ext2fs_bg_flag_clear (fs, i, EXT2_BG_BLOCK_UNINIT);
should_be = 1;
}
ext2fs_unmark_valid(fs);
if (!(EXT2_HAS_RO_COMPAT_FEATURE(fs->super,
EXT4_FEATURE_RO_COMPAT_GDT_CSUM)) ||
- !(fs->group_desc[group].bg_flags & EXT2_BG_BLOCK_UNINIT))
+ !(ext2fs_bg_flag_test(fs, group, EXT2_BG_BLOCK_UNINIT)))
return;
blk = (group * fs->super->s_blocks_per_group) +
else
ext2fs_fast_unmark_block_bitmap2(map, blk);
}
- fs->group_desc[group].bg_flags &= ~EXT2_BG_BLOCK_UNINIT;
+ ext2fs_bg_flag_clear(fs, group, EXT2_BG_BLOCK_UNINIT);
ext2fs_group_desc_csum_set(fs, group);
}
if (!(EXT2_HAS_RO_COMPAT_FEATURE(fs->super,
EXT4_FEATURE_RO_COMPAT_GDT_CSUM)) ||
- !(fs->group_desc[group].bg_flags & EXT2_BG_INODE_UNINIT))
+ !(ext2fs_bg_flag_test(fs, group, EXT2_BG_INODE_UNINIT)))
return;
ino = (group * fs->super->s_inodes_per_group) + 1;
for (i=0; i < fs->super->s_inodes_per_group; i++, ino++)
ext2fs_fast_unmark_inode_bitmap2(map, ino);
- fs->group_desc[group].bg_flags &= ~EXT2_BG_INODE_UNINIT;
+ ext2fs_bg_flag_clear(fs, group, EXT2_BG_INODE_UNINIT);
check_block_uninit(fs, fs->block_map, group);
}
if (old_desc_blk) {
if (fs->super->s_reserved_gdt_blocks && fs->block_map == bmap)
- fs->group_desc[group].bg_flags &= ~EXT2_BG_BLOCK_UNINIT;
+ ext2fs_bg_flag_clear(fs, group, EXT2_BG_BLOCK_UNINIT);
for (j=0; j < old_desc_blocks; j++)
if (old_desc_blk + j < fs->super->s_blocks_count)
ext2fs_mark_block_bitmap2(bmap,
/* We don't strictly need to be clearing the uninit flag if inuse < 0
* (i.e. freeing inodes) but it also means something is bad. */
- fs->group_desc[group].bg_flags &= ~EXT2_BG_INODE_UNINIT;
+ ext2fs_bg_flag_clear(fs, group, EXT2_BG_INODE_UNINIT);
if (EXT2_HAS_RO_COMPAT_FEATURE(fs->super,
EXT4_FEATURE_RO_COMPAT_GDT_CSUM)) {
ext2_ino_t first_unused_inode = fs->super->s_inodes_per_group -
else
ext2fs_unmark_block_bitmap2(fs->block_map, blk);
fs->group_desc[group].bg_free_blocks_count -= inuse;
- fs->group_desc[group].bg_flags &= ~EXT2_BG_BLOCK_UNINIT;
+ ext2fs_bg_flag_clear(fs, group, EXT2_BG_BLOCK_UNINIT);
ext2fs_group_desc_csum_set(fs, group);
ext2fs_free_blocks_count_add(fs->super, -inuse);
dgrp_t gr = ext2fs_group_of_blk(fs, new_blk);
fs->group_desc[gr].bg_free_blocks_count--;
fs->super->s_free_blocks_count--;
- fs->group_desc[gr].bg_flags &= ~EXT2_BG_BLOCK_UNINIT;
+ ext2fs_bg_flag_clear(fs, gr, EXT2_BG_BLOCK_UNINIT);
ext2fs_group_desc_csum_set(fs, gr);
}
}
dgrp_t gr = ext2fs_group_of_blk(fs, new_blk);
fs->group_desc[gr].bg_free_blocks_count--;
fs->super->s_free_blocks_count--;
- fs->group_desc[gr].bg_flags &= ~EXT2_BG_BLOCK_UNINIT;
+ ext2fs_bg_flag_clear(fs, gr, EXT2_BG_BLOCK_UNINIT);
ext2fs_group_desc_csum_set(fs, gr);
}
}
dgrp_t gr = ext2fs_group_of_blk(fs, blk);
fs->group_desc[gr].bg_free_blocks_count--;
fs->super->s_free_blocks_count--;
- fs->group_desc[gr].bg_flags &= ~EXT2_BG_BLOCK_UNINIT;
+ ext2fs_bg_flag_clear(fs, gr,
+ EXT2_BG_BLOCK_UNINIT);
ext2fs_group_desc_csum_set(fs, gr);
}
}
*/
if (csum_flag) {
if (i != fs->group_desc_count - 1)
- fs->group_desc[i].bg_flags |=
- EXT2_BG_BLOCK_UNINIT;
- fs->group_desc[i].bg_flags |= EXT2_BG_INODE_UNINIT;
+ ext2fs_bg_flag_set(fs, i, EXT2_BG_BLOCK_UNINIT)
+ ;
+ ext2fs_bg_flag_set(fs, i, EXT2_BG_INODE_UNINIT);
numblocks = super->s_inodes_per_group;
if (i == 0)
numblocks -= super->s_first_ino;
* they can be done for block group #0.
*/
if ((scan->scan_flags & EXT2_SF_DO_LAZY) &&
- (scan->fs->group_desc[scan->current_group].bg_flags &
- EXT2_BG_INODE_UNINIT))
+ (ext2fs_bg_flag_test(scan->fs, scan->current_group, EXT2_BG_INODE_UNINIT)
+ ))
goto force_new_group;
if (scan->inodes_left == 0)
goto force_new_group;
if (superblock > 1 && EXT2_HAS_RO_COMPAT_FEATURE(fs->super,
EXT4_FEATURE_RO_COMPAT_GDT_CSUM)) {
struct ext2_group_desc *gd;
- for (i = 0, gd = fs->group_desc; i < fs->group_desc_count;
- i++, gd++) {
- gd->bg_flags &= ~EXT2_BG_BLOCK_UNINIT;
- gd->bg_flags &= ~EXT2_BG_INODE_UNINIT;
- gd->bg_itable_unused = 0;
+ dgrp_t group;
+
+ for (group = 0; group < fs->group_desc_count; group++) {
+ ext2fs_bg_flag_clear(fs, group, EXT2_BG_BLOCK_UNINIT);
+ ext2fs_bg_flag_clear(fs, group, EXT2_BG_INODE_UNINIT);
+ fs->group_desc[group].bg_itable_unused = 0;
}
ext2fs_mark_super_dirty(fs);
}
if (!do_block)
goto skip_block_bitmap;
- if (csum_flag && fs->group_desc[i].bg_flags &
- EXT2_BG_BLOCK_UNINIT)
+ if (csum_flag && ext2fs_bg_flag_test(fs, i, EXT2_BG_BLOCK_UNINIT)
+ )
goto skip_this_block_bitmap;
retval = ext2fs_get_block_bitmap_range2(fs->block_map,
if (!do_inode)
continue;
- if (csum_flag && fs->group_desc[i].bg_flags &
- EXT2_BG_INODE_UNINIT)
+ if (csum_flag && ext2fs_bg_flag_test(fs, i, EXT2_BG_INODE_UNINIT)
+ )
goto skip_this_inode_bitmap;
retval = ext2fs_get_inode_bitmap_range2(fs->inode_map,
for (i = 0; i < fs->group_desc_count; i++) {
if (block_bitmap) {
blk = fs->group_desc[i].bg_block_bitmap;
- if (csum_flag && fs->group_desc[i].bg_flags &
- EXT2_BG_BLOCK_UNINIT &&
+ if (csum_flag &&
+ ext2fs_bg_flag_test(fs, i, EXT2_BG_BLOCK_UNINIT) &&
ext2fs_group_desc_csum_verify(fs, i))
blk = 0;
if (blk) {
}
if (inode_bitmap) {
blk = fs->group_desc[i].bg_inode_bitmap;
- if (csum_flag && fs->group_desc[i].bg_flags &
- EXT2_BG_INODE_UNINIT &&
+ if (csum_flag &&
+ ext2fs_bg_flag_test(fs, i, EXT2_BG_INODE_UNINIT) &&
ext2fs_group_desc_csum_verify(fs, i))
blk = 0;
if (blk) {
int first = 1, bg_flags = 0;
if (fs->super->s_feature_ro_compat & EXT4_FEATURE_RO_COMPAT_GDT_CSUM)
- bg_flags = fs->group_desc[i].bg_flags;
+ bg_flags = ext2fs_bg_flags(fs, i);
print_bg_opt(bg_flags, EXT2_BG_INODE_UNINIT, "INODE_UNINIT",
&first);
EXT2_BLOCK_SIZE(fs->super));
} else {
/* The kernel doesn't need to zero the itable blocks */
- fs->group_desc[i].bg_flags |= EXT2_BG_INODE_ZEROED;
+ ext2fs_bg_flag_set(fs, i, EXT2_BG_INODE_ZEROED);
ext2fs_group_desc_csum_set(fs, i);
}
retval = ext2fs_zero_blocks(fs, blk, num, &blk, &num);
fix_uninit_block_bitmaps(rfs->new_fs);
/* Clear the block bitmap uninit flag for the last block group */
- rfs->new_fs->group_desc[rfs->new_fs->group_desc_count-1].bg_flags &=
- ~EXT2_BG_BLOCK_UNINIT;
+ ext2fs_bg_flag_clear(rfs->new_fs, rfs->new_fs->group_desc_count - 1,
+ EXT2_BG_BLOCK_UNINIT);
*new_size = rfs->new_fs->super->s_blocks_count;
return;
for (g=0; g < fs->group_desc_count; g++) {
- if (!(fs->group_desc[g].bg_flags & EXT2_BG_BLOCK_UNINIT))
+ if (!(ext2fs_bg_flag_test(fs, g, EXT2_BG_BLOCK_UNINIT)))
continue;
blk = (g * fs->super->s_blocks_per_group) +
sizeof(struct ext2_group_desc));
adjblocks = 0;
- fs->group_desc[i].bg_flags = 0;
+ ext2fs_bg_flags_clear(fs, i, 0);
if (csum_flag)
- fs->group_desc[i].bg_flags |= EXT2_BG_INODE_UNINIT |
- EXT2_BG_INODE_ZEROED;
+ ext2fs_bg_flag_set(fs, i, EXT2_BG_INODE_UNINIT | EXT2_BG_INODE_ZEROED)
+ ;
if (i == fs->group_desc_count-1) {
numblocks = (fs->super->s_blocks_count -
fs->super->s_first_data_block) %
} else {
numblocks = fs->super->s_blocks_per_group;
if (csum_flag)
- fs->group_desc[i].bg_flags |=
- EXT2_BG_BLOCK_UNINIT;
+ ext2fs_bg_flag_set(fs, i, EXT2_BG_BLOCK_UNINIT)
+ ;
}
has_super = ext2fs_bg_has_super(fs, i);
rfs->needed_blocks++;
} else if (EXT2_HAS_RO_COMPAT_FEATURE(fs->super,
EXT4_FEATURE_RO_COMPAT_GDT_CSUM) &&
- (fs->group_desc[group].bg_flags & EXT2_BG_BLOCK_UNINIT)) {
+ (ext2fs_bg_flag_test(fs, group, EXT2_BG_BLOCK_UNINIT))) {
/*
* If the block bitmap is uninitialized, which means
* nothing other than standard metadata in use.
g = ext2fs_group_of_blk(fs, blk);
if (EXT2_HAS_RO_COMPAT_FEATURE(fs->super,
EXT4_FEATURE_RO_COMPAT_GDT_CSUM) &&
- (old_fs->group_desc[g].bg_flags & EXT2_BG_BLOCK_UNINIT)) {
+ ext2fs_bg_flag_test(old_fs, g, EXT2_BG_BLOCK_UNINIT)) {
/*
* The block bitmap is uninitialized, so skip
* to the next block group.
/*
* First calculate the block statistics
*/
- uninit = fs->group_desc[group].bg_flags & EXT2_BG_BLOCK_UNINIT;
+ uninit = ext2fs_bg_flag_test(fs, group, EXT2_BG_BLOCK_UNINIT);
ext2fs_super_and_bgd_loc(fs, group, &super_blk, &old_desc_blk,
&new_desc_blk, 0);
if (fs->super->s_feature_incompat & EXT2_FEATURE_INCOMPAT_META_BG)
group++;
count = 0;
group_free = 0;
- uninit = (fs->group_desc[group].bg_flags &
- EXT2_BG_BLOCK_UNINIT);
+ uninit = (ext2fs_bg_flag_test(fs, group, EXT2_BG_BLOCK_UNINIT)
+ );
ext2fs_super_and_bgd_loc(fs, group, &super_blk,
&old_desc_blk,
&new_desc_blk, 0);
group = 0;
/* Protect loop from wrap-around if s_inodes_count maxed */
- uninit = fs->group_desc[group].bg_flags & EXT2_BG_INODE_UNINIT;
+ uninit = ext2fs_bg_flag_test(fs, group, EXT2_BG_INODE_UNINIT);
for (ino = 1; ino <= fs->super->s_inodes_count && ino > 0; ino++) {
if (uninit ||
!ext2fs_fast_test_inode_bitmap2(fs->inode_map, ino)) {
group++;
count = 0;
group_free = 0;
- uninit = (fs->group_desc[group].bg_flags &
- EXT2_BG_INODE_UNINIT);
+ uninit = (ext2fs_bg_flag_test(fs, group, EXT2_BG_INODE_UNINIT)
+ );
}
}
fs->super->s_free_inodes_count = total_free;