On Wed 16-11-22 15:28:02, Baokun Li wrote: > When a backup superblock is updated in update_backups(), the primary > superblock's offset in the group (that is, sbi->s_sbh->b_blocknr) is used > as the backup superblock's offset in its group. However, when the block > size is 1K and bigalloc is enabled, the two offsets are not equal. This > causes the backup group descriptors to be overwritten by the superblock > in update_backups(). Moreover, if meta_bg is enabled, the file system will > be corrupted because this feature uses backup group descriptors. > > To solve this issue, we use a more accurate ext4_group_first_block_no() as > the offset of the backup superblock in its group. > > Fixes: d77147ff443b ("ext4: add support for online resizing with bigalloc") > Signed-off-by: Baokun Li <libaokun1@xxxxxxxxxx> The patch looks good to me. Feel free to add: Reviewed-by: Jan Kara <jack@xxxxxxx> Honza > --- > V1->V2: > Replace s_first_data_block with ext4_group_first_block_no() to avoid > type warning.(Reported-by: kernel test robot <lkp@xxxxxxxxx>) > > fs/ext4/resize.c | 6 +++--- > 1 file changed, 3 insertions(+), 3 deletions(-) > > diff --git a/fs/ext4/resize.c b/fs/ext4/resize.c > index 32fbfc173571..98e544c2f97d 100644 > --- a/fs/ext4/resize.c > +++ b/fs/ext4/resize.c > @@ -1591,8 +1591,8 @@ static int ext4_flex_group_add(struct super_block *sb, > int meta_bg = ext4_has_feature_meta_bg(sb); > sector_t old_gdb = 0; > > - update_backups(sb, sbi->s_sbh->b_blocknr, (char *)es, > - sizeof(struct ext4_super_block), 0); > + update_backups(sb, ext4_group_first_block_no(sb, 0), > + (char *)es, sizeof(struct ext4_super_block), 0); > for (; gdb_num <= gdb_num_end; gdb_num++) { > struct buffer_head *gdb_bh; > > @@ -1803,7 +1803,7 @@ static int ext4_group_extend_no_check(struct super_block *sb, > 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, > + update_backups(sb, ext4_group_first_block_no(sb, 0), > (char *)es, sizeof(struct ext4_super_block), 0); > } > return err; > -- > 2.31.1 > -- Jan Kara <jack@xxxxxxxx> SUSE Labs, CR