• Baokun Li's avatar
    ext4: fix corrupt backup group descriptors after online resize · 8f49ec60
    Baokun Li authored
    In commit 9a8c5b0d ("ext4: update the backup superblock's at the end
    of the online resize"), it is assumed that update_backups() only updates
    backup superblocks, so each b_data is treated as a backupsuper block to
    update its s_block_group_nr and s_checksum. However, update_backups()
    also updates the backup group descriptors, which causes the backup group
    descriptors to be corrupted.
    
    The above commit fixes the problem of invalid checksum of the backup
    superblock. The root cause of this problem is that the checksum of
    ext4_update_super() is not set correctly. This problem has been fixed
    in the previous patch ("ext4: fix bad checksum after online resize").
    
    However, we do need to set block_group_nr for the backup superblock in
    update_backups(). When a block is in a group that contains a backup
    superblock, and the block is the first block in the group, the block is
    definitely a superblock. We add a helper function that includes setting
    s_block_group_nr and updating checksum, and then call it only when the
    above conditions are met to prevent the backup group descriptors from
    being incorrectly modified.
    
    Fixes: 9a8c5b0d ("ext4: update the backup superblock's at the end of the online resize")
    Signed-off-by: default avatarBaokun Li <libaokun1@huawei.com>
    Reviewed-by: default avatarJan Kara <jack@suse.cz>
    Cc: stable@kernel.org
    Link: https://lore.kernel.org/r/20221117040341.1380702-3-libaokun1@huawei.comSigned-off-by: default avatarTheodore Ts'o <tytso@mit.edu>
    8f49ec60
resize.c 63.3 KB