diff options
author | Richard Maw <richard.maw@codethink.co.uk> | 2014-06-12 12:07:34 +0100 |
---|---|---|
committer | Richard Maw <richard.maw@codethink.co.uk> | 2014-06-12 12:07:34 +0100 |
commit | 485edc675200ff3097cec521c357441a1c2d9b0d (patch) | |
tree | 7edee2fc5e1fb60caa90f3bb26b1becde9691b99 /lib/ext2fs/alloc_tables.c | |
parent | 1ab0ea88057e922a89c6b8feebeb62c57e40f8de (diff) | |
parent | 5f4b406b03dc9fa27c78184df5b1d501e373ca01 (diff) | |
download | e2fsprogs-baserock/morph.tar.gz |
Merge 'baserock/richardmaw/yakshave/util-linux-blkid' into baserock/morphbaserock/morph
Reviewed-by: Lars Wirzenius
Reviewed-by: Sam Thursfield
Diffstat (limited to 'lib/ext2fs/alloc_tables.c')
-rw-r--r-- | lib/ext2fs/alloc_tables.c | 26 |
1 files changed, 9 insertions, 17 deletions
diff --git a/lib/ext2fs/alloc_tables.c b/lib/ext2fs/alloc_tables.c index 9f3d4e04..bc99943c 100644 --- a/lib/ext2fs/alloc_tables.c +++ b/lib/ext2fs/alloc_tables.c @@ -54,8 +54,8 @@ static blk64_t flexbg_offset(ext2_filsys fs, dgrp_t group, blk64_t start_blk, * Don't do a long search if the previous block * search is still valid. */ - if (start_blk && ext2fs_test_block_bitmap_range2(bmap, start_blk, - elem_size)) + if (start_blk && start_blk < ext2fs_blocks_count(fs->super) && + ext2fs_test_block_bitmap_range2(bmap, start_blk, elem_size)) return start_blk; start_blk = ext2fs_group_first_block2(fs, flexbg_size * flexbg); @@ -83,9 +83,8 @@ static blk64_t flexbg_offset(ext2_filsys fs, dgrp_t group, blk64_t start_blk, errcode_t ext2fs_allocate_group_table(ext2_filsys fs, dgrp_t group, ext2fs_block_bitmap bmap) { - unsigned int j; errcode_t retval; - blk64_t group_blk, start_blk, last_blk, new_blk, blk; + blk64_t group_blk, start_blk, last_blk, new_blk; dgrp_t last_grp = 0; int rem_grps = 0, flexbg_size = 0; @@ -205,19 +204,12 @@ errcode_t ext2fs_allocate_group_table(ext2_filsys fs, dgrp_t group, bmap, &new_blk); if (retval) return retval; - for (j=0, blk = new_blk; - j < fs->inode_blocks_per_group; - j++, blk++) { - ext2fs_mark_block_bitmap2(bmap, blk); - if (flexbg_size) { - dgrp_t gr = ext2fs_group_of_blk2(fs, blk); - ext2fs_bg_free_blocks_count_set(fs, gr, ext2fs_bg_free_blocks_count(fs, gr) - 1); - ext2fs_free_blocks_count_add(fs->super, -1); - ext2fs_bg_flags_clear(fs, gr, - EXT2_BG_BLOCK_UNINIT); - ext2fs_group_desc_csum_set(fs, gr); - } - } + if (flexbg_size) + ext2fs_block_alloc_stats_range(fs, new_blk, + fs->inode_blocks_per_group, +1); + else + ext2fs_mark_block_bitmap_range2(fs->block_map, + new_blk, fs->inode_blocks_per_group); ext2fs_inode_table_loc_set(fs, group, new_blk); } ext2fs_group_desc_csum_set(fs, group); |