Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 6df935ad authored by Yongqiang Yang's avatar Yongqiang Yang Committed by Theodore Ts'o
Browse files

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: default avatarYongqiang Yang <xiaoqiangnk@gmail.com>
Signed-off-by: default avatar"Theodore Ts'o" <tytso@mit.edu>
Cc: stable@vger.kernel.org
parent d7574ad0
Loading
Loading
Loading
Loading
+4 −0
Original line number Diff line number Diff line
@@ -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;
@@ -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;