| From 2ebd1704ded88a8ae29b5f3998b13959c715c4be Mon Sep 17 00:00:00 2001 |
| From: Yongqiang Yang <xiaoqiangnk@gmail.com> |
| Date: Wed, 5 Sep 2012 01:27:50 -0400 |
| Subject: ext4: avoid duplicate writes of the backup bg descriptor blocks |
| |
| From: Yongqiang Yang <xiaoqiangnk@gmail.com> |
| |
| commit 2ebd1704ded88a8ae29b5f3998b13959c715c4be upstream. |
| |
| The resize code was needlessly writing the backup block group |
| descriptor blocks multiple times (once per block group) during an |
| online resize. |
| |
| Signed-off-by: Yongqiang Yang <xiaoqiangnk@gmail.com> |
| Signed-off-by: "Theodore Ts'o" <tytso@mit.edu> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| |
| --- |
| fs/ext4/resize.c | 10 ++++++---- |
| 1 file changed, 6 insertions(+), 4 deletions(-) |
| |
| --- a/fs/ext4/resize.c |
| +++ b/fs/ext4/resize.c |
| @@ -1358,13 +1358,15 @@ exit_journal: |
| err = err2; |
| |
| if (!err) { |
| - int i; |
| + int gdb_num = group / EXT4_DESC_PER_BLOCK(sb); |
| + int gdb_num_end = ((group + flex_gd->count - 1) / |
| + EXT4_DESC_PER_BLOCK(sb)); |
| + |
| update_backups(sb, sbi->s_sbh->b_blocknr, (char *)es, |
| sizeof(struct ext4_super_block)); |
| - for (i = 0; i < flex_gd->count; i++, group++) { |
| + for (; gdb_num <= gdb_num_end; gdb_num++) { |
| struct buffer_head *gdb_bh; |
| - 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); |