• L
    ext4: recover csum seed of tmp_inode after migrating to extents · 8fbfe233
    Li Lingfeng 提交于
    hulk inclusion
    category: bugfix
    bugzilla: 186944, https://gitee.com/openeuler/kernel/issues/I5DAJY
    CVE: NA
    
    --------------------------------
    
    When migrating to extents, the checksum seed of temporary inode
    need to be replaced by inode's, otherwise the inode checksums
    will be incorrect when swapping the inodes data.
    
    However, the temporary inode can not match it's checksum to
    itself since it has lost it's own checksum seed.
    
    mkfs.ext4 -F /dev/sdc
    mount /dev/sdc /mnt/sdc
    xfs_io -fc "pwrite 4k 4k" -c "fsync" /mnt/sdc/testfile
    chattr -e /mnt/sdc/testfile
    chattr +e /mnt/sdc/testfile
    fsck -fn /dev/sdc
    
    ========
    ...
    Pass 1: Checking inodes, blocks, and sizes
    Inode 13 passes checks, but checksum does not match inode.  Fix? no
    ...
    ========
    
    The fix is simple, save the checksum seed of temporary inode, and
    recover it after migrating to extents.
    
    Fixes: e81c9302 ("ext4: set csum seed in tmp inode while migrating to extents")
    Signed-off-by: NLi Lingfeng <lilingfeng3@huawei.com>
    Reviewed-by: NZhang Yi <yi.zhang@huawei.com>
    Signed-off-by: NYongqiang Liu <liuyongqiang13@huawei.com>
    8fbfe233
migrate.c 16.8 KB