提交 6df935ad 编写于 作者: Y Yongqiang Yang 提交者: Theodore Ts'o

ext4: don't copy non-existent gdt blocks when resizing

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: NYongqiang Yang <xiaoqiangnk@gmail.com>
Signed-off-by: N"Theodore Ts'o" <tytso@mit.edu>
Cc: stable@vger.kernel.org
上级 d7574ad0
...@@ -456,6 +456,9 @@ static int setup_new_flex_group_blocks(struct super_block *sb, ...@@ -456,6 +456,9 @@ static int setup_new_flex_group_blocks(struct super_block *sb,
gdblocks = ext4_bg_num_gdb(sb, group); gdblocks = ext4_bg_num_gdb(sb, group);
start = ext4_group_first_block_no(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 */ /* Copy all of the GDT blocks into the backup in this group */
for (j = 0, block = start + 1; j < gdblocks; j++, block++) { for (j = 0, block = start + 1; j < gdblocks; j++, block++) {
struct buffer_head *gdb; struct buffer_head *gdb;
...@@ -498,6 +501,7 @@ static int setup_new_flex_group_blocks(struct super_block *sb, ...@@ -498,6 +501,7 @@ static int setup_new_flex_group_blocks(struct super_block *sb,
goto out; goto out;
} }
handle_itb:
/* Initialize group tables of the grop @group */ /* Initialize group tables of the grop @group */
if (!(bg_flags[i] & EXT4_BG_INODE_ZEROED)) if (!(bg_flags[i] & EXT4_BG_INODE_ZEROED))
goto handle_bb; goto handle_bb;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册