• Ye Bin's avatar
    ext4: fix symlink file size not match to file content · a2b0b205
    Ye Bin authored
    We got issue as follows:
    [home]# fsck.ext4  -fn  ram0yb
    e2fsck 1.45.6 (20-Mar-2020)
    Pass 1: Checking inodes, blocks, and sizes
    Pass 2: Checking directory structure
    Symlink /p3/d14/d1a/l3d (inode #3494) is invalid.
    Clear? no
    Entry 'l3d' in /p3/d14/d1a (3383) has an incorrect filetype (was 7, should be 0).
    Fix? no
    
    As the symlink file size does not match the file content. If the writeback
    of the symlink data block failed, ext4_finish_bio() handles the end of IO.
    However this function fails to mark the buffer with BH_write_io_error and
    so when unmount does journal checkpoint it cannot detect the writeback
    error and will cleanup the journal. Thus we've lost the correct data in the
    journal area. To solve this issue, mark the buffer as BH_write_io_error in
    ext4_finish_bio().
    
    Cc: stable@kernel.org
    Signed-off-by: default avatarYe Bin <yebin10@huawei.com>
    Reviewed-by: default avatarJan Kara <jack@suse.cz>
    Link: https://lore.kernel.org/r/20220321144438.201685-1-yebin10@huawei.comSigned-off-by: default avatarTheodore Ts'o <tytso@mit.edu>
    a2b0b205
page-io.c 15.3 KB