linux/fs/f2fs
Jaegeuk Kim 8c242db9b8 f2fs: fix stale ATOMIC_WRITTEN_PAGE private pointer
When I forced to enable atomic operations intentionally, I could hit the below
panic, since we didn't clear page->private in f2fs_invalidate_page called by
file truncation.

The panic occurs due to NULL mapping having page->private.

BUG: unable to handle kernel paging request at ffffffffffffffff
IP: drop_buffers+0x38/0xe0
PGD 5d00c067
PUD 5d00e067
PMD 0
CPU: 3 PID: 1648 Comm: fsstress Tainted: G      D    OE   4.10.0+ #5
Hardware name: innotek GmbH VirtualBox/VirtualBox, BIOS VirtualBox 12/01/2006
task: ffff9151952863c0 task.stack: ffffaaec40db4000
RIP: 0010:drop_buffers+0x38/0xe0
RSP: 0018:ffffaaec40db74c8 EFLAGS: 00010292
Call Trace:
 ? page_referenced+0x8b/0x170
 try_to_free_buffers+0xc5/0xe0
 try_to_release_page+0x49/0x50
 shrink_page_list+0x8bc/0x9f0
 shrink_inactive_list+0x1dd/0x500
 ? shrink_active_list+0x2c0/0x430
 shrink_node_memcg+0x5eb/0x7c0
 shrink_node+0xe1/0x320
 do_try_to_free_pages+0xef/0x2e0
 try_to_free_pages+0xe9/0x190
 __alloc_pages_slowpath+0x390/0xe70
 __alloc_pages_nodemask+0x291/0x2b0
 alloc_pages_current+0x95/0x140
 __page_cache_alloc+0xc4/0xe0
 pagecache_get_page+0xab/0x2a0
 grab_cache_page_write_begin+0x20/0x40
 get_read_data_page+0x2e6/0x4c0 [f2fs]
 ? f2fs_mark_inode_dirty_sync+0x16/0x30 [f2fs]
 ? truncate_data_blocks_range+0x238/0x2b0 [f2fs]
 get_lock_data_page+0x30/0x190 [f2fs]
 __exchange_data_block+0xaaf/0xf40 [f2fs]
 f2fs_fallocate+0x418/0xd00 [f2fs]
 vfs_fallocate+0x157/0x220
 SyS_fallocate+0x48/0x80

Signed-off-by: Yunlei He <heyunlei@huawei.com>
Signed-off-by: Chao Yu <yuchao0@huawei.com>
[Chao Yu: use INMEM_INVALIDATE for better tracing]
Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org>
2017-03-21 22:34:10 -04:00
..
acl.c f2fs: keep dirty inodes selectively for checkpoint 2016-11-23 12:11:08 -08:00
acl.h f2fs: remove dead code f2fs_check_acl 2016-09-14 16:52:36 -07:00
checkpoint.c f2fs: le32_to_cpu for ckpt->cp_pack_total_block_count 2017-03-21 16:52:16 -04:00
data.c f2fs: fix stale ATOMIC_WRITTEN_PAGE private pointer 2017-03-21 22:34:10 -04:00
debug.c f2fs: skip scanning free nid bitmap of full NAT blocks 2017-03-20 10:00:17 -04:00
dir.c f2fs: use __set{__clear}_bit_le 2017-03-20 10:00:16 -04:00
extent_cache.c f2fs: kill __is_extent_same 2017-02-27 10:07:43 -08:00
f2fs.h f2fs: fix stale ATOMIC_WRITTEN_PAGE private pointer 2017-03-21 22:34:10 -04:00
file.c f2fs: don't allow to get pino when filename is encrypted 2017-03-21 16:52:16 -04:00
gc.c f2fs: fix a plint compile warning 2017-02-27 10:51:21 -08:00
gc.h f2fs: detect idle time depending on user behavior 2016-01-11 15:56:37 -08:00
hash.c f2fs: introduce dot and dotdot name check 2015-05-28 15:41:34 -07:00
inline.c for-f2fs-4.10 2016-12-14 09:07:36 -08:00
inode.c f2fs: fix wrong error injection for evict_inode 2017-03-21 16:52:16 -04:00
Kconfig f2fs: add mount option to select fault injection ratio 2016-05-07 10:32:22 -07:00
Makefile fs crypto: move per-file encryption from f2fs tree to fs/crypto 2016-03-17 21:19:33 -07:00
namei.c f2fs: fix the fault of checking F2FS_LINK_MAX for rename inode 2017-03-21 16:52:16 -04:00
node.c f2fs: combine nat_bits and free_nid_bitmap cache 2017-03-20 10:00:18 -04:00
node.h f2fs: new helper cur_cp_crc() getting crc in f2fs_checkpoint 2017-02-27 10:07:47 -08:00
recovery.c f2fs: change recovery policy of xattr node block 2017-02-23 10:10:52 -08:00
segment.c f2fs: fix stale ATOMIC_WRITTEN_PAGE private pointer 2017-03-21 22:34:10 -04:00
segment.h f2fs: update the comment of default nr_pages to skipping 2017-02-27 10:07:46 -08:00
shrinker.c f2fs: avoid casted negative value as shrink count 2016-11-23 12:11:03 -08:00
super.c f2fs: build stat_info before orphan inode recovery 2017-03-21 16:52:16 -04:00
trace.c f2fs: use bio op accessors 2016-06-07 13:41:38 -06:00
trace.h f2fs: add sbi and page pointer in f2fs_io_info 2015-05-28 15:41:32 -07:00
xattr.c f2fs: le16_to_cpu for xattr->e_value_size 2017-03-21 16:52:16 -04:00
xattr.h f2fs: enhance lookup xattr 2017-02-22 20:24:51 -08:00