| From foo@baz Mon Sep 17 12:33:31 CEST 2018 |
| From: Chao Yu <yuchao0@huawei.com> |
| Date: Fri, 27 Jul 2018 18:15:14 +0800 |
| Subject: f2fs: fix to active page in lru list for read path |
| |
| From: Chao Yu <yuchao0@huawei.com> |
| |
| [ Upstream commit 82cf4f132e6d16dca6fc3bd955019246141bc645 ] |
| |
| If config CONFIG_F2FS_FAULT_INJECTION is on, for both read or write path |
| we will call find_lock_page() to get the page, but for read path, it |
| missed to passing FGP_ACCESSED to allocator to active the page in LRU |
| list, result in being reclaimed in advance incorrectly, fix it. |
| |
| Reported-by: Xianrong Zhou <zhouxianrong@huawei.com> |
| Signed-off-by: Chao Yu <yuchao0@huawei.com> |
| Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org> |
| Signed-off-by: Sasha Levin <alexander.levin@microsoft.com> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| --- |
| fs/f2fs/f2fs.h | 7 ++++++- |
| 1 file changed, 6 insertions(+), 1 deletion(-) |
| |
| --- a/fs/f2fs/f2fs.h |
| +++ b/fs/f2fs/f2fs.h |
| @@ -1766,8 +1766,13 @@ static inline struct page *f2fs_grab_cac |
| pgoff_t index, bool for_write) |
| { |
| #ifdef CONFIG_F2FS_FAULT_INJECTION |
| - struct page *page = find_lock_page(mapping, index); |
| + struct page *page; |
| |
| + if (!for_write) |
| + page = find_get_page_flags(mapping, index, |
| + FGP_LOCK | FGP_ACCESSED); |
| + else |
| + page = find_lock_page(mapping, index); |
| if (page) |
| return page; |
| |