f2fs: write pending bios when cp_error is set
When testing ioc_shutdown, put_super is able to be hanged by waiting for
writebacking pages as follows.
INFO: task umount:2723 blocked for more than 120 seconds.
Tainted: G O 4.4.0-rc3+ #8
"echo 0 > /proc/sys/kernel/hung_task_timeout_secs" disables this message.
umount D
ffff88000859f9d8 0 2723 2110 0x00000000
ffff88000859f9d8 0000000000000000 0000000000000000 ffffffff81e11540
ffff880078c225c0 ffff8800085a0000 ffff88007fc17440 7fffffffffffffff
ffffffff818239f0 ffff88000859fb48 ffff88000859f9f0 ffffffff8182310c
Call Trace:
[<
ffffffff818239f0>] ? bit_wait+0x50/0x50
[<
ffffffff8182310c>] schedule+0x3c/0x90
[<
ffffffff81827fb9>] schedule_timeout+0x2d9/0x430
[<
ffffffff810e0f8f>] ? mark_held_locks+0x6f/0xa0
[<
ffffffff8111614d>] ? ktime_get+0x7d/0x140
[<
ffffffff818239f0>] ? bit_wait+0x50/0x50
[<
ffffffff8106a655>] ? kvm_clock_get_cycles+0x25/0x30
[<
ffffffff8111617c>] ? ktime_get+0xac/0x140
[<
ffffffff818239f0>] ? bit_wait+0x50/0x50
[<
ffffffff81822564>] io_schedule_timeout+0xa4/0x110
[<
ffffffff81823a25>] bit_wait_io+0x35/0x50
[<
ffffffff818235bd>] __wait_on_bit+0x5d/0x90
[<
ffffffff811b9e8b>] wait_on_page_bit+0xcb/0xf0
[<
ffffffff810d5f90>] ? autoremove_wake_function+0x40/0x40
[<
ffffffff811cf84c>] truncate_inode_pages_range+0x4bc/0x840
[<
ffffffff811cfc3d>] truncate_inode_pages_final+0x4d/0x60
[<
ffffffffc023ced5>] f2fs_evict_inode+0x75/0x400 [f2fs]
[<
ffffffff812639bc>] evict+0xbc/0x190
[<
ffffffff81263d19>] iput+0x229/0x2c0
[<
ffffffffc0241885>] f2fs_put_super+0x105/0x1a0 [f2fs]
[<
ffffffff8124756a>] generic_shutdown_super+0x6a/0xf0
[<
ffffffff812478f7>] kill_block_super+0x27/0x70
[<
ffffffffc0241290>] kill_f2fs_super+0x20/0x30 [f2fs]
[<
ffffffff81247b03>] deactivate_locked_super+0x43/0x70
[<
ffffffff81247f4c>] deactivate_super+0x5c/0x60
[<
ffffffff81268d2f>] cleanup_mnt+0x3f/0x90
[<
ffffffff81268dc2>] __cleanup_mnt+0x12/0x20
[<
ffffffff810ac463>] task_work_run+0x73/0xa0
[<
ffffffff810032ac>] exit_to_usermode_loop+0xcc/0xd0
[<
ffffffff81003e7c>] syscall_return_slowpath+0xcc/0xe0
[<
ffffffff81829ea2>] int_ret_from_sys_call+0x25/0x9f
Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org>