| From 6ca792edc13c409e8d4eb9001e048264c6a2eb64 Mon Sep 17 00:00:00 2001 |
| From: Maarten ter Huurne <maarten@treewalker.org> |
| Date: Mon, 1 Jul 2013 08:12:08 -0400 |
| Subject: ext4: fix corruption when online resizing a fs with 1K block size |
| |
| From: Maarten ter Huurne <maarten@treewalker.org> |
| |
| commit 6ca792edc13c409e8d4eb9001e048264c6a2eb64 upstream. |
| |
| 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> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| |
| --- |
| fs/ext4/resize.c | 4 +--- |
| 1 file changed, 1 insertion(+), 3 deletions(-) |
| |
| --- a/fs/ext4/resize.c |
| +++ b/fs/ext4/resize.c |
| @@ -1656,12 +1656,10 @@ errout: |
| err = err2; |
| |
| if (!err) { |
| - ext4_fsblk_t first_block; |
| - first_block = ext4_group_first_block_no(sb, 0); |
| if (test_opt(sb, DEBUG)) |
| printk(KERN_DEBUG "EXT4-fs: extended group to %llu " |
| "blocks\n", ext4_blocks_count(es)); |
| - update_backups(sb, EXT4_SB(sb)->s_sbh->b_blocknr - first_block, |
| + update_backups(sb, EXT4_SB(sb)->s_sbh->b_blocknr, |
| (char *)es, sizeof(struct ext4_super_block), 0); |
| } |
| return err; |