diff options
-rw-r--r-- | fs/ext4/resize.c | 14 |
1 files changed, 8 insertions, 6 deletions
diff --git a/fs/ext4/resize.c b/fs/ext4/resize.c index f9d948f0eb86..3fed79da0d2c 100644 --- a/fs/ext4/resize.c +++ b/fs/ext4/resize.c | |||
@@ -1582,7 +1582,7 @@ int ext4_resize_fs(struct super_block *sb, ext4_fsblk_t n_blocks_count) | |||
1582 | ext4_fsblk_t o_blocks_count; | 1582 | ext4_fsblk_t o_blocks_count; |
1583 | ext4_group_t o_group; | 1583 | ext4_group_t o_group; |
1584 | ext4_group_t n_group; | 1584 | ext4_group_t n_group; |
1585 | ext4_grpblk_t offset; | 1585 | ext4_grpblk_t offset, add; |
1586 | unsigned long n_desc_blocks; | 1586 | unsigned long n_desc_blocks; |
1587 | unsigned long o_desc_blocks; | 1587 | unsigned long o_desc_blocks; |
1588 | unsigned long desc_blocks; | 1588 | unsigned long desc_blocks; |
@@ -1605,7 +1605,7 @@ int ext4_resize_fs(struct super_block *sb, ext4_fsblk_t n_blocks_count) | |||
1605 | return 0; | 1605 | return 0; |
1606 | 1606 | ||
1607 | ext4_get_group_no_and_offset(sb, n_blocks_count - 1, &n_group, &offset); | 1607 | ext4_get_group_no_and_offset(sb, n_blocks_count - 1, &n_group, &offset); |
1608 | ext4_get_group_no_and_offset(sb, o_blocks_count, &o_group, &offset); | 1608 | ext4_get_group_no_and_offset(sb, o_blocks_count - 1, &o_group, &offset); |
1609 | 1609 | ||
1610 | n_desc_blocks = (n_group + EXT4_DESC_PER_BLOCK(sb)) / | 1610 | n_desc_blocks = (n_group + EXT4_DESC_PER_BLOCK(sb)) / |
1611 | EXT4_DESC_PER_BLOCK(sb); | 1611 | EXT4_DESC_PER_BLOCK(sb); |
@@ -1634,10 +1634,12 @@ int ext4_resize_fs(struct super_block *sb, ext4_fsblk_t n_blocks_count) | |||
1634 | } | 1634 | } |
1635 | brelse(bh); | 1635 | brelse(bh); |
1636 | 1636 | ||
1637 | if (offset != 0) { | 1637 | /* extend the last group */ |
1638 | /* extend the last group */ | 1638 | if (n_group == o_group) |
1639 | ext4_grpblk_t add; | 1639 | add = n_blocks_count - o_blocks_count; |
1640 | add = EXT4_BLOCKS_PER_GROUP(sb) - offset; | 1640 | else |
1641 | add = EXT4_BLOCKS_PER_GROUP(sb) - (offset + 1); | ||
1642 | if (add > 0) { | ||
1641 | err = ext4_group_extend_no_check(sb, o_blocks_count, add); | 1643 | err = ext4_group_extend_no_check(sb, o_blocks_count, add); |
1642 | if (err) | 1644 | if (err) |
1643 | goto out; | 1645 | goto out; |