• Ye Bin's avatar
    ext2: fix fs corruption when trying to remove a non-empty directory with IO error · 27cfa258
    Ye Bin authored
    We got issue as follows:
    [home]# mount  /dev/sdd  test
    [home]# cd test
    [test]# ls
    dir1  lost+found
    [test]# rmdir  dir1
    ext2_empty_dir: inject fault
    [test]# ls
    lost+found
    [test]# cd ..
    [home]# umount test
    [home]# fsck.ext2 -fn  /dev/sdd
    e2fsck 1.42.9 (28-Dec-2013)
    Pass 1: Checking inodes, blocks, and sizes
    Inode 4065, i_size is 0, should be 1024.  Fix? no
    
    Pass 2: Checking directory structure
    Pass 3: Checking directory connectivity
    Unconnected directory inode 4065 (/???)
    Connect to /lost+found? no
    
    '..' in ... (4065) is / (2), should be <The NULL inode> (0).
    Fix? no
    
    Pass 4: Checking reference counts
    Inode 2 ref count is 3, should be 4.  Fix? no
    
    Inode 4065 ref count is 2, should be 3.  Fix? no
    
    Pass 5: Checking group summary information
    
    /dev/sdd: ********** WARNING: Filesystem still has errors **********
    
    /dev/sdd: 14/128016 files (0.0% non-contiguous), 18477/512000 blocks
    
    Reason is same with commit 7aab5c84. We can't assume directory
    is empty when read directory entry failed.
    
    Link: https://lore.kernel.org/r/20220615090010.1544152-1-yebin10@huawei.comSigned-off-by: default avatarYe Bin <yebin10@huawei.com>
    Signed-off-by: default avatarJan Kara <jack@suse.cz>
    27cfa258
dir.c 18 KB