Whamcloud - gitweb
e2fsprogs: add ext2fs_group_blocks_count helper
authorEric Sandeen <sandeen@redhat.com>
Fri, 16 Sep 2011 13:21:53 +0000 (09:21 -0400)
committerTheodore Ts'o <tytso@mit.edu>
Fri, 16 Sep 2011 13:28:43 +0000 (09:28 -0400)
Code to count the number of blocks in the last partial
group is cut and pasted around the e2fsprogs codebase
a few times.

Making this a helper function should improve matters.

Signed-off-by: Eric Sandeen <sandeen@redhat.com>
Signed-off-by: Theodore Ts'o <tytso@mit.edu>
lib/ext2fs/alloc_sb.c
lib/ext2fs/blknum.c
lib/ext2fs/closefs.c
lib/ext2fs/ext2fs.h
resize/online.c
resize/resize2fs.c

index 09786a7..2e32389 100644 (file)
@@ -74,15 +74,7 @@ int ext2fs_reserve_super_and_bgd(ext2_filsys fs,
        if (new_desc_blk)
                ext2fs_mark_block_bitmap2(bmap, new_desc_blk);
 
-       if (group == fs->group_desc_count-1) {
-               num_blocks = (ext2fs_blocks_count(fs->super) -
-                            fs->super->s_first_data_block) %
-                       fs->super->s_blocks_per_group;
-               if (!num_blocks)
-                       num_blocks = fs->super->s_blocks_per_group;
-       } else
-               num_blocks = fs->super->s_blocks_per_group;
-
+       num_blocks = ext2fs_group_blocks_count(fs, group);
        num_blocks -= 2 + fs->inode_blocks_per_group + used_blks;
 
        return num_blocks  ;
index b3e6dca..b9ac36c 100644 (file)
@@ -43,6 +43,25 @@ blk64_t ext2fs_group_last_block2(ext2_filsys fs, dgrp_t group)
 }
 
 /*
+ * Return the number of blocks in a group
+ */
+int ext2fs_group_blocks_count(ext2_filsys fs, dgrp_t group)
+{
+       int num_blocks;
+
+       if (group == fs->group_desc_count - 1) {
+               num_blocks = (ext2fs_blocks_count(fs->super) -
+                               fs->super->s_first_data_block) %
+                             fs->super->s_blocks_per_group;
+               if (!num_blocks)
+                       num_blocks = fs->super->s_blocks_per_group;
+       } else
+               num_blocks = fs->super->s_blocks_per_group;
+
+       return num_blocks;
+}
+
+/*
  * Return the inode data block count
  */
 blk64_t ext2fs_inode_data_blocks2(ext2_filsys fs,
index 952f496..51ef63c 100644 (file)
@@ -152,14 +152,7 @@ int ext2fs_super_and_bgd_loc(ext2_filsys fs,
                                        &ret_new_desc_blk2,
                                        &ret_used_blks);
 
-       if (group == fs->group_desc_count-1) {
-               numblocks = (ext2fs_blocks_count(fs->super) -
-                            (blk64_t) fs->super->s_first_data_block) %
-                       (blk64_t) fs->super->s_blocks_per_group;
-               if (!numblocks)
-                       numblocks = fs->super->s_blocks_per_group;
-       } else
-               numblocks = fs->super->s_blocks_per_group;
+       numblocks = ext2fs_group_blocks_count(fs, group);
 
        if (ret_super_blk)
                *ret_super_blk = (blk_t)ret_super_blk2;
index ed1a3ce..1b9acc3 100644 (file)
@@ -765,6 +765,7 @@ extern errcode_t ext2fs_get_block_bitmap_range2(ext2fs_block_bitmap bmap,
 extern dgrp_t ext2fs_group_of_blk2(ext2_filsys fs, blk64_t);
 extern blk64_t ext2fs_group_first_block2(ext2_filsys fs, dgrp_t group);
 extern blk64_t ext2fs_group_last_block2(ext2_filsys fs, dgrp_t group);
+extern int ext2fs_group_blocks_count(ext2_filsys fs, dgrp_t group);
 extern blk64_t ext2fs_inode_data_blocks2(ext2_filsys fs,
                                         struct ext2_inode *inode);
 extern blk64_t ext2fs_inode_i_blocks(ext2_filsys fs,
index 1b3589b..8bb7e9e 100644 (file)
@@ -152,12 +152,7 @@ errcode_t online_resize_fs(ext2_filsys fs, const char *mtpt,
                input.block_bitmap = ext2fs_block_bitmap_loc(new_fs, i);
                input.inode_bitmap = ext2fs_inode_bitmap_loc(new_fs, i);
                input.inode_table = ext2fs_inode_table_loc(new_fs, i);
-               input.blocks_count = sb->s_blocks_per_group;
-               if (i == new_fs->group_desc_count-1) {
-                       input.blocks_count = ext2fs_blocks_count(new_fs->super) -
-                               sb->s_first_data_block -
-                               (i * sb->s_blocks_per_group);
-               }
+               input.blocks_count = ext2fs_group_blocks_count(new_fs, i);
                input.reserved_blocks = (blk_t) (percent * input.blocks_count
                                                 / 100.0);
 
index 45ea5f4..59beb35 100644 (file)
@@ -499,18 +499,10 @@ retry:
                ext2fs_bg_flags_zap(fs, i);
                if (csum_flag)
                        ext2fs_bg_flags_set(fs, i, EXT2_BG_INODE_UNINIT | EXT2_BG_INODE_ZEROED);
-               if (i == fs->group_desc_count-1) {
-                       numblocks = (ext2fs_blocks_count(fs->super) -
-                                    fs->super->s_first_data_block) %
-                                            fs->super->s_blocks_per_group;
-                       if (!numblocks)
-                               numblocks = fs->super->s_blocks_per_group;
-               } else {
-                       numblocks = fs->super->s_blocks_per_group;
-                       if (csum_flag)
-                               ext2fs_bg_flags_set(fs, i,
-                                                   EXT2_BG_BLOCK_UNINIT);
-               }
+
+               numblocks = ext2fs_group_blocks_count(fs, i);
+               if ((i < fs->group_desc_count - 1) && csum_flag)
+                       ext2fs_bg_flags_set(fs, i, EXT2_BG_BLOCK_UNINIT);
 
                has_super = ext2fs_bg_has_super(fs, i);
                if (has_super) {