diff options
author | Theodore Ts'o <tytso@mit.edu> | 2013-12-16 01:35:56 -0500 |
---|---|---|
committer | Theodore Ts'o <tytso@mit.edu> | 2013-12-16 01:35:56 -0500 |
commit | e4681bca170094430ef173b67345d2d8f0cfcea8 (patch) | |
tree | c181113d4e11701dae5daa53f943cfa517aeab46 /e2fsck/pass3.c | |
parent | 2b24aadee872b8200729db479a6418a9d7f83794 (diff) | |
parent | 4727c67dc20f0c15cc8502b9bc3ee9f73d7e2c3a (diff) | |
download | e2fsprogs-e4681bca170094430ef173b67345d2d8f0cfcea8.tar.gz |
Merge branch 'maint' into next
Conflicts:
debugfs/debugfs.8.in
Diffstat (limited to 'e2fsck/pass3.c')
-rw-r--r-- | e2fsck/pass3.c | 23 |
1 files changed, 16 insertions, 7 deletions
diff --git a/e2fsck/pass3.c b/e2fsck/pass3.c index dc9d7c19..c57aab81 100644 --- a/e2fsck/pass3.c +++ b/e2fsck/pass3.c @@ -718,12 +718,23 @@ static int expand_dir_proc(ext2_filsys fs, last_blk = *blocknr; return 0; } - retval = ext2fs_new_block2(fs, last_blk, ctx->block_found_map, - &new_blk); - if (retval) { - es->err = retval; - return BLOCK_ABORT; + + if (blockcnt && + (EXT2FS_B2C(fs, last_blk) == EXT2FS_B2C(fs, last_blk + 1))) + new_blk = last_blk + 1; + else { + last_blk &= ~EXT2FS_CLUSTER_MASK(fs); + retval = ext2fs_new_block2(fs, last_blk, ctx->block_found_map, + &new_blk); + if (retval) { + es->err = retval; + return BLOCK_ABORT; + } + es->newblocks++; + ext2fs_block_alloc_stats2(fs, new_blk, +1); } + last_blk = new_blk; + if (blockcnt > 0) { retval = ext2fs_new_dir_block(fs, 0, 0, &block); if (retval) { @@ -749,8 +760,6 @@ static int expand_dir_proc(ext2_filsys fs, ext2fs_free_mem(&block); *blocknr = new_blk; ext2fs_mark_block_bitmap2(ctx->block_found_map, new_blk); - ext2fs_block_alloc_stats2(fs, new_blk, +1); - es->newblocks++; if (es->num == 0) return (BLOCK_CHANGED | BLOCK_ABORT); |