On Fri 04-11-22 16:35:53, Baokun Li wrote: > 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@xxxxxxxxxx> Indeed. Good catch! Feel free to add: Reviewed-by: Jan Kara <jack@xxxxxxx> Honza > --- > fs/ext4/resize.c | 4 ++-- > 1 file changed, 2 insertions(+), 2 deletions(-) > > diff --git a/fs/ext4/resize.c b/fs/ext4/resize.c > index 6dfe9ccae0c5..32fbfc173571 100644 > --- a/fs/ext4/resize.c > +++ b/fs/ext4/resize.c > @@ -1471,8 +1471,6 @@ static void ext4_update_super(struct super_block *sb, > * active. */ > ext4_r_blocks_count_set(es, ext4_r_blocks_count(es) + > reserved_blocks); > - ext4_superblock_csum_set(sb); > - unlock_buffer(sbi->s_sbh); > > /* Update the free space counts */ > percpu_counter_add(&sbi->s_freeclusters_counter, > @@ -1508,6 +1506,8 @@ static void ext4_update_super(struct super_block *sb, > ext4_calculate_overhead(sb); > 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)) > printk(KERN_DEBUG "EXT4-fs: added group %u:" > "%llu blocks(%llu free %llu reserved)\n", flex_gd->count, > -- > 2.31.1 > -- Jan Kara <jack@xxxxxxxx> SUSE Labs, CR