f2fs: fix to update dirty page count correctly
Once we failed to merge inline data into inode page during flushing inline
inode, we will skip invoking inode_dec_dirty_pages, which makes dirty page
count incorrect, result in panic in ->evict_inode, Fix it.
------------[ cut here ]------------
kernel BUG at /home/yuchao/git/devf2fs/inode.c:336!
invalid opcode: 0000 [#1] PREEMPT SMP
CPU: 3 PID: 10004 Comm: umount Tainted: G O 4.6.0-rc5+ #17
Hardware name: innotek GmbH VirtualBox/VirtualBox, BIOS VirtualBox 12/01/2006
task:
f0c33000 ti:
c5212000 task.ti:
c5212000
EIP: 0060:[<
f89aacb5>] EFLAGS:
00010202 CPU: 3
EIP is at f2fs_evict_inode+0x85/0x490 [f2fs]
EAX:
00000001 EBX:
c4529ea0 ECX:
00000001 EDX:
00000000
ESI:
c0131000 EDI:
f89dd0a0 EBP:
c5213e9c ESP:
c5213e78
DS: 007b ES: 007b FS: 00d8 GS: 0033 SS: 0068
CR0:
80050033 CR2:
b75878c0 CR3:
1a36a700 CR4:
000406f0
Stack:
c4529ea0 c4529ef4 c5213e8c c176d45c c4529ef4 00000000 c4529ea0 c4529fac
f89dd0a0 c5213eb0 c1204a68 c5213ed8 c452a2b4 c6680930 c5213ec0 c1204b64
c6680d44 c6680620 c5213eec c120588d ee84b000 ee84b5c0 c5214000 ee84b5e0
Call Trace:
[<
c176d45c>] ? _raw_spin_unlock+0x2c/0x50
[<
c1204a68>] evict+0xa8/0x170
[<
c1204b64>] dispose_list+0x34/0x50
[<
c120588d>] evict_inodes+0x10d/0x130
[<
c11ea941>] generic_shutdown_super+0x41/0xe0
[<
c1185190>] ? unregister_shrinker+0x40/0x50
[<
c1185190>] ? unregister_shrinker+0x40/0x50
[<
c11eac52>] kill_block_super+0x22/0x70
[<
f89af23e>] kill_f2fs_super+0x1e/0x20 [f2fs]
[<
c11eae1d>] deactivate_locked_super+0x3d/0x70
[<
c11eb383>] deactivate_super+0x43/0x60
[<
c1208ec9>] cleanup_mnt+0x39/0x80
[<
c1208f50>] __cleanup_mnt+0x10/0x20
[<
c107d091>] task_work_run+0x71/0x90
[<
c105725a>] exit_to_usermode_loop+0x72/0x9e
[<
c1001c7c>] do_fast_syscall_32+0x19c/0x1c0
[<
c176dd48>] sysenter_past_esp+0x45/0x74
EIP: [<
f89aacb5>] f2fs_evict_inode+0x85/0x490 [f2fs] SS:ESP 0068:
c5213e78
---[ end trace
d30536330b7fdc58 ]---
Signed-off-by: Chao Yu <yuchao0@huawei.com>
Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org>