E2fsck now updates 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.
bitmap-optimize
Theodore Ts'o 2003-04-05 22:50:44 -05:00
parent 085c2af234
commit 2a77a784a3
8 changed files with 40 additions and 6 deletions

View File

@ -1,3 +1,12 @@
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

View File

@ -323,6 +323,7 @@ void check_super_block(e2fsck_t ctx)
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);
@ -462,6 +463,8 @@ void check_super_block(e2fsck_t ctx)
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;
}
@ -488,6 +491,21 @@ void check_super_block(e2fsck_t ctx)
}
}
#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,

View File

@ -1,3 +1,10 @@
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

View File

@ -39,9 +39,6 @@ Pass 5: Checking group summary information
Block bitmap differences: -22
Fix? yes
Free blocks count wrong (74, counted=75).
Fix? yes
Inode bitmap differences: -13
Fix? yes

View File

@ -26,7 +26,7 @@ Pass 5: Checking group summary information
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

View File

@ -33,7 +33,7 @@ Pass 5: Checking group summary information
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

View File

@ -8,6 +8,9 @@ Pass 5: Checking group summary information
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

View File

@ -30,7 +30,7 @@ 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