diff options
author | Theodore Ts'o <tytso@mit.edu> | 2003-04-05 22:50:44 -0500 |
---|---|---|
committer | Theodore Ts'o <tytso@mit.edu> | 2003-04-05 22:50:44 -0500 |
commit | 2a77a784a327835dbf0c8aa92978f201e44fbc26 (patch) | |
tree | 6a71f0397942c0af08a115016b685fa909dcd76a | |
parent | 085c2af234c5571f372466801837fa26f03feae1 (diff) | |
download | e2fsprogs-2a77a784a327835dbf0c8aa92978f201e44fbc26.tar.gz |
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.
-rw-r--r-- | e2fsck/ChangeLog | 9 | ||||
-rw-r--r-- | e2fsck/super.c | 18 | ||||
-rw-r--r-- | tests/ChangeLog | 7 | ||||
-rw-r--r-- | tests/f_baddir/expect.1 | 3 | ||||
-rw-r--r-- | tests/f_dup/expect.1 | 2 | ||||
-rw-r--r-- | tests/f_dup2/expect.1 | 2 | ||||
-rw-r--r-- | tests/f_end-bitmap/expect.1 | 3 | ||||
-rw-r--r-- | tests/f_lpf/expect.1 | 2 |
8 files changed, 40 insertions, 6 deletions
diff --git a/e2fsck/ChangeLog b/e2fsck/ChangeLog index 0fb86426..51094822 100644 --- a/e2fsck/ChangeLog +++ b/e2fsck/ChangeLog @@ -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 diff --git a/e2fsck/super.c b/e2fsck/super.c index 2deff446..9210739a 100644 --- a/e2fsck/super.c +++ b/e2fsck/super.c @@ -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, diff --git a/tests/ChangeLog b/tests/ChangeLog index 11620322..40659073 100644 --- a/tests/ChangeLog +++ b/tests/ChangeLog @@ -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 diff --git a/tests/f_baddir/expect.1 b/tests/f_baddir/expect.1 index 375a2bf9..d47352dc 100644 --- a/tests/f_baddir/expect.1 +++ b/tests/f_baddir/expect.1 @@ -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 diff --git a/tests/f_dup/expect.1 b/tests/f_dup/expect.1 index a6745c41..e09a786a 100644 --- a/tests/f_dup/expect.1 +++ b/tests/f_dup/expect.1 @@ -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 diff --git a/tests/f_dup2/expect.1 b/tests/f_dup2/expect.1 index 28b74042..5d448fe5 100644 --- a/tests/f_dup2/expect.1 +++ b/tests/f_dup2/expect.1 @@ -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 diff --git a/tests/f_end-bitmap/expect.1 b/tests/f_end-bitmap/expect.1 index 87e2fd64..3348a2b3 100644 --- a/tests/f_end-bitmap/expect.1 +++ b/tests/f_end-bitmap/expect.1 @@ -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 diff --git a/tests/f_lpf/expect.1 b/tests/f_lpf/expect.1 index 4f2853c5..6c0a746c 100644 --- a/tests/f_lpf/expect.1 +++ b/tests/f_lpf/expect.1 @@ -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 |