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:026d0d27c4
("ext4: reduce computation of overhead during resize") Fixes:de394a8665
("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>
This commit is contained in:
parent
a7e9d977e0
commit
a408f33e89
|
@ -1476,8 +1476,6 @@ static void ext4_update_super(struct super_block *sb,
|
||||||
* active. */
|
* active. */
|
||||||
ext4_r_blocks_count_set(es, ext4_r_blocks_count(es) +
|
ext4_r_blocks_count_set(es, ext4_r_blocks_count(es) +
|
||||||
reserved_blocks);
|
reserved_blocks);
|
||||||
ext4_superblock_csum_set(sb);
|
|
||||||
unlock_buffer(sbi->s_sbh);
|
|
||||||
|
|
||||||
/* Update the free space counts */
|
/* Update the free space counts */
|
||||||
percpu_counter_add(&sbi->s_freeclusters_counter,
|
percpu_counter_add(&sbi->s_freeclusters_counter,
|
||||||
|
@ -1513,6 +1511,8 @@ static void ext4_update_super(struct super_block *sb,
|
||||||
ext4_calculate_overhead(sb);
|
ext4_calculate_overhead(sb);
|
||||||
es->s_overhead_clusters = cpu_to_le32(sbi->s_overhead);
|
es->s_overhead_clusters = cpu_to_le32(sbi->s_overhead);
|
||||||
|
|
||||||
|
ext4_superblock_csum_set(sb);
|
||||||
|
unlock_buffer(sbi->s_sbh);
|
||||||
if (test_opt(sb, DEBUG))
|
if (test_opt(sb, DEBUG))
|
||||||
printk(KERN_DEBUG "EXT4-fs: added group %u:"
|
printk(KERN_DEBUG "EXT4-fs: added group %u:"
|
||||||
"%llu blocks(%llu free %llu reserved)\n", flex_gd->count,
|
"%llu blocks(%llu free %llu reserved)\n", flex_gd->count,
|
||||||
|
|
Loading…
Reference in New Issue