]> git.ipfire.org Git - thirdparty/e2fsprogs.git/commitdiff
Use new ext2fs_super_and_bgd_loc2 call in libext2fs
authorJose R. Santos <jrs@us.ibm.com>
Sun, 12 Jul 2009 01:29:30 +0000 (21:29 -0400)
committerTheodore Ts'o <tytso@mit.edu>
Sun, 12 Jul 2009 01:29:30 +0000 (21:29 -0400)
The new ext2fs_super_and_bgd_loc2() function has some changes aside
from just blk64_t support.  Lets make sure that the interfaces are
sane by adding libext2fs support early to get the new API tested here.

Signed-off-by: Jose R. Santos <jrs@us.ibm.com>
Signed-off-by: "Theodore Ts'o" <tytso@mit.edu>
e2fsck/pass5.c
lib/ext2fs/alloc.c
lib/ext2fs/alloc_sb.c
lib/ext2fs/closefs.c

index f8447386993b2a7945ae5db352b0e4ffafbc5c9d..fe8fda28ed7261ef6338dcf03e2bb561c6a61bdb 100644 (file)
@@ -103,7 +103,7 @@ static void print_bitmap_problem(e2fsck_t ctx, int problem,
 static void check_block_bitmaps(e2fsck_t ctx)
 {
        ext2_filsys fs = ctx->fs;
-       blk_t   i;
+       blk64_t i;
        int     *free_array;
        int     group = 0;
        blk_t   blocks = 0;
@@ -119,7 +119,7 @@ static void check_block_bitmaps(e2fsck_t ctx)
        int     count = 0;
        int     cmp_block = 0;
        int     redo_flag = 0;
-       blk_t   super_blk, old_desc_blk, new_desc_blk;
+       blk64_t super_blk, old_desc_blk, new_desc_blk;
 
        clear_problem_context(&pctx);
        free_array = (int *) e2fsck_allocate_memory(ctx,
@@ -175,7 +175,7 @@ redo_counts:
                                super_blk = 0;
                                old_desc_blk = 0;
                                new_desc_blk = 0;
-                               ext2fs_super_and_bgd_loc(fs, group, &super_blk,
+                               ext2fs_super_and_bgd_loc2(fs, group, &super_blk,
                                         &old_desc_blk, &new_desc_blk, 0);
 
                                if (fs->super->s_feature_incompat &
index a1399081cce01e46f566adde2c3c1128854e1506..3439445c54fa7ae7e15355ddef69fd7b9c66865d 100644 (file)
@@ -33,7 +33,7 @@ static void check_block_uninit(ext2_filsys fs, ext2fs_block_bitmap map,
                          dgrp_t group)
 {
        blk_t           i;
-       blk_t           blk, super_blk, old_desc_blk, new_desc_blk;
+       blk64_t         blk, super_blk, old_desc_blk, new_desc_blk;
        int             old_desc_blocks;
 
        if (!(EXT2_HAS_RO_COMPAT_FEATURE(fs->super,
@@ -44,8 +44,8 @@ static void check_block_uninit(ext2_filsys fs, ext2fs_block_bitmap map,
        blk = (group * fs->super->s_blocks_per_group) +
                fs->super->s_first_data_block;
 
-       ext2fs_super_and_bgd_loc(fs, group, &super_blk,
-                                &old_desc_blk, &new_desc_blk, 0);
+       ext2fs_super_and_bgd_loc2(fs, group, &super_blk,
+                                 &old_desc_blk, &new_desc_blk, 0);
 
        if (fs->super->s_feature_incompat &
            EXT2_FEATURE_INCOMPAT_META_BG)
index b0aeb964d0696a5d8693ba96927ce0e118f36c21..42c1d9456ab6c3157997263576abc62205133918 100644 (file)
@@ -44,11 +44,12 @@ int ext2fs_reserve_super_and_bgd(ext2_filsys fs,
                                 dgrp_t group,
                                 ext2fs_block_bitmap bmap)
 {
-       blk_t   super_blk, old_desc_blk, new_desc_blk;
+       blk64_t super_blk, old_desc_blk, new_desc_blk;
+       blk_t   used_blks;
        int     j, old_desc_blocks, num_blocks;
 
-       num_blocks = ext2fs_super_and_bgd_loc(fs, group, &super_blk,
-                                             &old_desc_blk, &new_desc_blk, 0);
+       ext2fs_super_and_bgd_loc2(fs, group, &super_blk,
+                                 &old_desc_blk, &new_desc_blk, &used_blks);
 
        if (fs->super->s_feature_incompat & EXT2_FEATURE_INCOMPAT_META_BG)
                old_desc_blocks = fs->super->s_first_meta_bg;
@@ -57,6 +58,7 @@ int ext2fs_reserve_super_and_bgd(ext2_filsys fs,
                        fs->desc_blocks + fs->super->s_reserved_gdt_blocks;
 
        if (super_blk || (group == 0))
+               /* FIXME-64 */
                ext2fs_mark_block_bitmap(bmap, super_blk);
 
        if (old_desc_blk) {
@@ -64,11 +66,24 @@ int ext2fs_reserve_super_and_bgd(ext2_filsys fs,
                        fs->group_desc[group].bg_flags &= ~EXT2_BG_BLOCK_UNINIT;
                for (j=0; j < old_desc_blocks; j++)
                        if (old_desc_blk + j < fs->super->s_blocks_count)
+                               /* FIXME-64 */
                                ext2fs_mark_block_bitmap(bmap,
                                                         old_desc_blk + j);
        }
        if (new_desc_blk)
+               /* FIXME-64 */
                ext2fs_mark_block_bitmap(bmap, new_desc_blk);
 
-       return num_blocks;
+       if (group == fs->group_desc_count-1) {
+               num_blocks = (fs->super->s_blocks_count -
+                            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 -= 2 + fs->inode_blocks_per_group + used_blks;
+
+       return num_blocks  ;
 }
index 426126813aeefa8878dceea1204b1ba802c8cc3f..e3520922f9e7e47302c706d6778bde088e563b1a 100644 (file)
@@ -338,11 +338,10 @@ errcode_t ext2fs_flush(ext2_filsys fs)
                old_desc_blocks = fs->desc_blocks;
 
        for (i = 0; i < fs->group_desc_count; i++) {
-               blk_t   super_blk, old_desc_blk, new_desc_blk;
-               int     meta_bg;
+               blk64_t super_blk, old_desc_blk, new_desc_blk;
 
-               ext2fs_super_and_bgd_loc(fs, i, &super_blk, &old_desc_blk,
-                                        &new_desc_blk, &meta_bg);
+               ext2fs_super_and_bgd_loc2(fs, i, &super_blk, &old_desc_blk,
+                                        &new_desc_blk, 0);
 
                if (!(fs->flags & EXT2_FLAG_MASTER_SB_ONLY) &&i && super_blk) {
                        retval = write_backup_super(fs, i, super_blk,
@@ -360,6 +359,8 @@ errcode_t ext2fs_flush(ext2_filsys fs)
                                goto errout;
                }
                if (new_desc_blk) {
+                       int meta_bg = i / EXT2_DESC_PER_BLOCK(fs->super);
+
                        retval = io_channel_write_blk(fs->io, new_desc_blk,
                                1, group_ptr + (meta_bg*fs->blocksize));
                        if (retval)