+2003-04-05 Theodore Ts'o <tytso@mit.edu>
+
+ * super.c (check_super_block): Update the global free block and
+ inode counters from the block group specific counters
+ quietly. This is needed for an experimental patch which
+ eliminates locking the entire filesystem when allocating
+ blocks or inodes; if the filesystem is not unmounted
+ cleanly, the global counts may not be accurate.
+
2003-03-17 Theodore Ts'o <tytso@mit.edu>
* util.c: Explicitly declare e2fsck_global_ctx as extern for the
dgrp_t i;
blk_t should_be;
struct problem_context pctx;
+ __u32 free_blocks = 0, free_inodes = 0;
inodes_per_block = EXT2_INODES_PER_BLOCK(fs->super);
ipg_max = inodes_per_block * (blocks_per_group - 4);
ctx->invalid_inode_table_flag[i]++;
ctx->invalid_bitmaps++;
}
+ free_blocks += fs->group_desc[i].bg_free_blocks_count;
+ free_inodes += fs->group_desc[i].bg_free_inodes_count;
first_block += fs->super->s_blocks_per_group;
last_block += fs->super->s_blocks_per_group;
}
}
}
#endif
+
+ /*
+ * Update the global counts from the block group counts. This
+ * is needed for an experimental patch which eliminates
+ * locking the entire filesystem when allocating blocks or
+ * inodes; if the filesystem is not unmounted cleanly, the
+ * global counts may not be accurate.
+ */
+ if (!(ctx->options & E2F_OPT_READONLY) &&
+ ((free_blocks != fs->super->s_free_blocks_count) ||
+ (free_inodes != fs->super->s_free_inodes_count))) {
+ fs->super->s_free_blocks_count = free_blocks;
+ fs->super->s_free_inodes_count = free_inodes;
+ ext2fs_mark_super_dirty(fs);
+ }
/*
* For the Hurd, check to see if the filetype option is set,
+2003-04-05 Theodore Ts'o <tytso@mit.edu>
+
+ * f_baddir, f_dup, f_dup2, f_end-bitmap, f_lpf: Update test cases
+ to deal with changes to automatically calculate and update
+ the global inode and block counts at the beginning of the
+ e2fsck run.
+
2003-03-25 Theodore Ts'o <tytso@mit.edu>
* f_h_badnode, f_h_badroot, f_h_reindex: Updated expect script to
Block bitmap differences: -22
Fix? yes
-Free blocks count wrong (74, counted=75).
-Fix? yes
-
Inode bitmap differences: -13
Fix? yes
Free blocks count wrong for group #0 (44, counted=60).
Fix? yes
-Free blocks count wrong (62, counted=60).
+Free blocks count wrong (44, counted=60).
Fix? yes
Padding at end of block bitmap is not set. Fix? yes
Free blocks count wrong for group #0 (8, counted=22).
Fix? yes
-Free blocks count wrong (26, counted=22).
+Free blocks count wrong (8, counted=22).
Fix? yes
Padding at end of block bitmap is not set. Fix? yes
Free blocks count wrong for group #0 (44, counted=63).
Fix? yes
+Free blocks count wrong (44, counted=63).
+Fix? yes
+
Padding at end of block bitmap is not set. Fix? yes
Free blocks count wrong for group #0 (24, counted=33).
Fix? yes
-Free blocks count wrong (38, counted=33).
+Free blocks count wrong (24, counted=33).
Fix? yes
Inode bitmap differences: +13