From: Tao Ma <boyu.mt@xxxxxxxxxx> Now in online resize, we will add a bunch of groups at one time in ext4_flex_group_add, so in most cases a lot of group descriptors will be in the same group block. But in the end of this function, update_backups will be called for every group descriptor and the same block will be copied and journalled again and again. It is really a waste. So add a old_gdb to store the group block we have already done the backup and skip the backup until we meet with a new group block. Signed-off-by: Tao Ma <boyu.mt@xxxxxxxxxx> --- fs/ext4/resize.c | 13 +++++++++++-- 1 files changed, 11 insertions(+), 2 deletions(-) diff --git a/fs/ext4/resize.c b/fs/ext4/resize.c index 019d528..ae2f5fc 100644 --- a/fs/ext4/resize.c +++ b/fs/ext4/resize.c @@ -1348,6 +1348,7 @@ exit_journal: if (!err) { int i; + sector_t old_gdb = 0; update_backups(sb, sbi->s_sbh->b_blocknr, (char *)es, sizeof(struct ext4_super_block)); for (i = 0; i < flex_gd->count; i++, group++) { @@ -1355,8 +1356,16 @@ exit_journal: int gdb_num; gdb_num = group / EXT4_BLOCKS_PER_GROUP(sb); gdb_bh = sbi->s_group_desc[gdb_num]; - update_backups(sb, gdb_bh->b_blocknr, gdb_bh->b_data, - gdb_bh->b_size); + /* + * only backup the group descriptor block + * which hasn't been updated before. + */ + if (old_gdb != gdb_bh->b_blocknr) { + update_backups(sb, gdb_bh->b_blocknr, + gdb_bh->b_data, + gdb_bh->b_size); + old_gdb = gdb_bh->b_blocknr; + } } } exit: -- 1.7.1 -- To unsubscribe from this list: send the line "unsubscribe linux-ext4" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html