From 20f2ccb3262b11d3a7b892cb9a11ea1c8c2ddd3b Mon Sep 17 00:00:00 2001 From: "Jose R. Santos" Date: Sat, 11 Jul 2009 21:29:30 -0400 Subject: [PATCH] Use new ext2fs_super_and_bgd_loc2 call in libext2fs 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 Signed-off-by: "Theodore Ts'o" --- e2fsck/pass5.c | 6 +++--- lib/ext2fs/alloc.c | 6 +++--- lib/ext2fs/alloc_sb.c | 23 +++++++++++++++++++---- lib/ext2fs/closefs.c | 9 +++++---- 4 files changed, 30 insertions(+), 14 deletions(-) diff --git a/e2fsck/pass5.c b/e2fsck/pass5.c index f844738..fe8fda2 100644 --- a/e2fsck/pass5.c +++ b/e2fsck/pass5.c @@ -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 & diff --git a/lib/ext2fs/alloc.c b/lib/ext2fs/alloc.c index a139908..3439445 100644 --- a/lib/ext2fs/alloc.c +++ b/lib/ext2fs/alloc.c @@ -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) diff --git a/lib/ext2fs/alloc_sb.c b/lib/ext2fs/alloc_sb.c index b0aeb96..42c1d94 100644 --- a/lib/ext2fs/alloc_sb.c +++ b/lib/ext2fs/alloc_sb.c @@ -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 ; } diff --git a/lib/ext2fs/closefs.c b/lib/ext2fs/closefs.c index 4261268..e352092 100644 --- a/lib/ext2fs/closefs.c +++ b/lib/ext2fs/closefs.c @@ -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) -- 1.8.3.1