Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

ext4: fix bad checksum after online resize

When online resizing is performed twice consecutively, the error message
"Superblock checksum does not match superblock" is displayed for the
second time. Here's the reproducer:

mkfs.ext4 -F /dev/sdb 100M
mount /dev/sdb /tmp/test
resize2fs /dev/sdb 5G
resize2fs /dev/sdb 6G

To solve this issue, we moved the update of the checksum after the
es->s_overhead_clusters is updated.

Fixes: 026d0d27c488 ("ext4: reduce computation of overhead during resize")
Fixes: de394a86658f ("ext4: update s_overhead_clusters in the superblock during an on-line resize")
Signed-off-by: Baokun Li <libaokun1@huawei.com>
Reviewed-by: Darrick J. Wong <djwong@kernel.org>
Reviewed-by: Jan Kara <jack@suse.cz>
Cc: stable@kernel.org
Link: https://lore.kernel.org/r/20221117040341.1380702-2-libaokun1@huawei.com
Signed-off-by: Theodore Ts'o <tytso@mit.edu>

authored by

Baokun Li and committed by
Theodore Ts'o
a408f33e a7e9d977

+2 -2
+2 -2
fs/ext4/resize.c
··· 1476 1476 * active. */ 1477 1477 ext4_r_blocks_count_set(es, ext4_r_blocks_count(es) + 1478 1478 reserved_blocks); 1479 - ext4_superblock_csum_set(sb); 1480 - unlock_buffer(sbi->s_sbh); 1481 1479 1482 1480 /* Update the free space counts */ 1483 1481 percpu_counter_add(&sbi->s_freeclusters_counter, ··· 1511 1513 ext4_calculate_overhead(sb); 1512 1514 es->s_overhead_clusters = cpu_to_le32(sbi->s_overhead); 1513 1515 1516 + ext4_superblock_csum_set(sb); 1517 + unlock_buffer(sbi->s_sbh); 1514 1518 if (test_opt(sb, DEBUG)) 1515 1519 printk(KERN_DEBUG "EXT4-fs: added group %u:" 1516 1520 "%llu blocks(%llu free %llu reserved)\n", flex_gd->count,