]> git.ipfire.org Git - thirdparty/e2fsprogs.git/commitdiff
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 09786a75548dbec0af94c09bf3cf681623d0f973..2e32389400fa06b1bc5752b4ea246d1582f4c3d9 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 b3e6dcad1b31ae6a6a5208c20209ba73d94a6278..b9ac36cfa854106710f005652506835ad38d8474 100644 (file)
@@ -42,6 +42,25 @@ blk64_t ext2fs_group_last_block2(ext2_filsys fs, dgrp_t group)
                        (fs->super->s_blocks_per_group - 1));
 }
 
+/*
+ * 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
  */
index 952f4966c713b4049ba9157d8361659ce14783f3..51ef63cb1d5af201d3e23b67c044a023ea7a27ac 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 ed1a3ce5983df88b01b2448ebd7a01bf448084e6..1b9acc30569656facee2364da5b48b7e85ce0741 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 1b3589bcdcf5f6a46c017af84ee8cc4638c099a4..8bb7e9e4add0d58628a3e0574b4ed76ff1f370fe 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 45ea5f420f070742890d5af03cb42798d1e09393..59beb357e01117dbb0d485233f21e33d4e1c0fb4 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) {