• Jaegeuk Kim's avatar
    f2fs: avoid infinite loop in the EIO case on recover_orphan_inodes · 09922800
    Jaegeuk Kim authored
    This patch should fix an infinite loop case below.
    
    F2FS-fs : inject IO error in f2fs_read_end_io+0xf3/0x120 [f2fs]
    F2FS-fs (nvme0n1p1): recover_orphan_inode: orphan failed (ino=39ac1a), run fsck to fix.
    ...
    [<ffffffffc0b11ede>] sync_meta_pages+0xae/0x270 [f2fs]
    [<ffffffffc0b288dd>] ? flush_sit_entries+0x8d/0x960 [f2fs]
    [<ffffffffc0b13801>] write_checkpoint+0x361/0xf20 [f2fs]
    [<ffffffffb40e979d>] ? trace_hardirqs_on+0xd/0x10
    [<ffffffffc0b0a199>] ? f2fs_sync_fs+0x79/0x190 [f2fs]
    [<ffffffffc0b0a1a5>] f2fs_sync_fs+0x85/0x190 [f2fs]
    [<ffffffffc0b2560e>] f2fs_balance_fs_bg+0x7e/0x1c0 [f2fs]
    [<ffffffffc0b216c4>] f2fs_write_node_pages+0x34/0x320 [f2fs]
    [<ffffffffb41dff21>] do_writepages+0x21/0x30
    [<ffffffffb429edb1>] __writeback_single_inode+0x61/0x760
    [<ffffffffb490a937>] ? _raw_spin_unlock+0x27/0x40
    [<ffffffffb42a0805>] writeback_single_inode+0xd5/0x190
    [<ffffffffb42a0959>] write_inode_now+0x99/0xc0
    [<ffffffffb4289a16>] iput+0x1f6/0x2c0
    [<ffffffffc0b0e3be>] f2fs_fill_super+0xe0e/0x1300 [f2fs]
    [<ffffffffb426c394>] ? sget_userns+0x4f4/0x530
    [<ffffffffb426c692>] mount_bdev+0x182/0x1b0
    [<ffffffffc0b0d5b0>] ? f2fs_commit_super+0x100/0x100 [f2fs]
    [<ffffffffc0b0a375>] f2fs_mount+0x15/0x20 [f2fs]
    [<ffffffffb426d038>] mount_fs+0x38/0x170
    [<ffffffffb428ec9b>] vfs_kern_mount+0x6b/0x160
    [<ffffffffb4291d9e>] do_mount+0x1be/0xd60
    [<ffffffffb4291a57>] ? copy_mount_options+0xb7/0x220
    [<ffffffffb4292c54>] SyS_mount+0x94/0xd0
    [<ffffffffb490b345>] entry_SYSCALL_64_fastpath+0x23/0xc6
    Signed-off-by: default avatarJaegeuk Kim <jaegeuk@kernel.org>
    09922800
super.c 52.4 KB