• Z
    ext4: Fix entry corruption when disk online and offline frequently · 6c3aa8d2
    ZhangXiaoxu 提交于
    euler inclusion
    category: bugfix
    CVE: NA
    Bugzilla: 13275
    
    --------------------------------------
    
    I got some errors when I repair an ext4 volume which stacked by an
    iscsi target:
        Entry 'test60' in / (2) has deleted/unused inode 73750.  Clear?
    It can be reproduced when the network not good enough.
    
    When I debug this I found ext4 will read entry buffer from disk and
    the buffer is marked with write_io_error.
    
    If the buffer is marked with write_io_error, it means it already
    wroten to journal, and not checked out to disk. IOW, the journal
    is newer than the data in disk.
    If this journal record 'delete test60', it means the 'test60' still
    on the disk metadata.
    
    In this case, if we read the buffer from disk successfully and create
    file continue, the new journal record will overwrite the journal
    which record 'delete test60', then the entry corruptioned.
    
    So, use the buffer rather than read from disk if the buffer marked
    with write_io_error
    Signed-off-by: NZhangXiaoxu <zhangxiaoxu5@huawei.com>
    Reviewed-by: Nzhangyi (F) <yi.zhang@huawei.com>
    Signed-off-by: NZhang Xiaoxu <zhangxiaoxu5@huawei.com>
    Signed-off-by: NYang Yingliang <yangyingliang@huawei.com>
    6c3aa8d2
ext4.h 115.0 KB