aboutsummaryrefslogtreecommitdiffstats
path: root/fs/ext4
diff options
context:
space:
mode:
authorMaarten ter Huurne <maarten@treewalker.org>2013-07-01 08:12:08 -0400
committerTheodore Ts'o <tytso@mit.edu>2013-07-01 08:12:08 -0400
commit6ca792edc13c409e8d4eb9001e048264c6a2eb64 (patch)
treed4f2cb0ece2d3ebf8cbbd982a5238b3a08978a65 /fs/ext4
parent03b40e349695dc700582568e5b410a89058f707e (diff)
ext4: fix corruption when online resizing a fs with 1K block size
Subtracting the number of the first data block places the superblock backups one block too early, corrupting the file system. When the block size is larger than 1K, the first data block is 0, so the subtraction has no effect and no corruption occurs. Signed-off-by: Maarten ter Huurne <maarten@treewalker.org> Signed-off-by: "Theodore Ts'o" <tytso@mit.edu> Reviewed-by: Jan Kara <jack@suse.cz> CC: stable@vger.kernel.org
Diffstat (limited to 'fs/ext4')
-rw-r--r--fs/ext4/resize.c4
1 files changed, 1 insertions, 3 deletions
diff --git a/fs/ext4/resize.c b/fs/ext4/resize.c
index 707095b924d9..c5adbb318a90 100644
--- a/fs/ext4/resize.c
+++ b/fs/ext4/resize.c
@@ -1660,12 +1660,10 @@ errout:
1660 err = err2; 1660 err = err2;
1661 1661
1662 if (!err) { 1662 if (!err) {
1663 ext4_fsblk_t first_block;
1664 first_block = ext4_group_first_block_no(sb, 0);
1665 if (test_opt(sb, DEBUG)) 1663 if (test_opt(sb, DEBUG))
1666 printk(KERN_DEBUG "EXT4-fs: extended group to %llu " 1664 printk(KERN_DEBUG "EXT4-fs: extended group to %llu "
1667 "blocks\n", ext4_blocks_count(es)); 1665 "blocks\n", ext4_blocks_count(es));
1668 update_backups(sb, EXT4_SB(sb)->s_sbh->b_blocknr - first_block, 1666 update_backups(sb, EXT4_SB(sb)->s_sbh->b_blocknr,
1669 (char *)es, sizeof(struct ext4_super_block), 0); 1667 (char *)es, sizeof(struct ext4_super_block), 0);
1670 } 1668 }
1671 return err; 1669 return err;