Skip to content

Commit

Permalink
ext4: don't copy non-existent gdt blocks when resizing
Browse files Browse the repository at this point in the history
The resize code was copying blocks at the beginning of each block
group in order to copy the superblock and block group descriptor table
(gdt) blocks.  This was, unfortunately, being done even for block
groups that did not have super blocks or gdt blocks.  This is a
complete waste of perfectly good I/O bandwidth, to skip writing those
blocks for sparse bg's.

Signed-off-by: Yongqiang Yang <xiaoqiangnk@gmail.com>
Signed-off-by: "Theodore Ts'o" <tytso@mit.edu>
Cc: stable@vger.kernel.org
  • Loading branch information
Yongqiang Yang authored and Theodore Ts'o committed Sep 5, 2012
1 parent d7574ad commit 6df935a
Showing 1 changed file with 4 additions and 0 deletions.
4 changes: 4 additions & 0 deletions fs/ext4/resize.c
Original file line number Diff line number Diff line change
Expand Up @@ -456,6 +456,9 @@ static int setup_new_flex_group_blocks(struct super_block *sb,
gdblocks = ext4_bg_num_gdb(sb, group);
start = ext4_group_first_block_no(sb, group);

if (!ext4_bg_has_super(sb, group))
goto handle_itb;

/* Copy all of the GDT blocks into the backup in this group */
for (j = 0, block = start + 1; j < gdblocks; j++, block++) {
struct buffer_head *gdb;
Expand Down Expand Up @@ -498,6 +501,7 @@ static int setup_new_flex_group_blocks(struct super_block *sb,
goto out;
}

handle_itb:
/* Initialize group tables of the grop @group */
if (!(bg_flags[i] & EXT4_BG_INODE_ZEROED))
goto handle_bb;
Expand Down

0 comments on commit 6df935a

Please sign in to comment.