On Fri, Nov 04, 2022 at 04:35:53PM +0800, 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> Yep, that looks correct. Sort of a pity that the checksum computation isn't quite as automatic as it is in other filesystems, but that's my fault... :/ Reviewed-by: Darrick J. Wong <djwong@xxxxxxxxxx> --D > --- > 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 >