| From 5a40582c1d48cea04d325e261ffcd4fbd9f68b11 Mon Sep 17 00:00:00 2001 |
| From: Sasha Levin <sashal@kernel.org> |
| Date: Fri, 28 Dec 2018 00:34:36 -0800 |
| Subject: vmscan: return NODE_RECLAIM_NOSCAN in node_reclaim() when CONFIG_NUMA |
| is n |
| |
| From: Wei Yang <richard.weiyang@gmail.com> |
| |
| [ Upstream commit 8b09549c2bfd9f3f8f4cdad74107ef4f4ff9cdd7 ] |
| |
| Commit fa5e084e43eb ("vmscan: do not unconditionally treat zones that |
| fail zone_reclaim() as full") changed the return value of |
| node_reclaim(). The original return value 0 means NODE_RECLAIM_SOME |
| after this commit. |
| |
| While the return value of node_reclaim() when CONFIG_NUMA is n is not |
| changed. This will leads to call zone_watermark_ok() again. |
| |
| This patch fixes the return value by adjusting to NODE_RECLAIM_NOSCAN. |
| Since node_reclaim() is only called in page_alloc.c, move it to |
| mm/internal.h. |
| |
| Link: http://lkml.kernel.org/r/20181113080436.22078-1-richard.weiyang@gmail.com |
| Signed-off-by: Wei Yang <richard.weiyang@gmail.com> |
| Acked-by: Michal Hocko <mhocko@suse.com> |
| Reviewed-by: Matthew Wilcox <willy@infradead.org> |
| Cc: Mel Gorman <mgorman@techsingularity.net> |
| Signed-off-by: Andrew Morton <akpm@linux-foundation.org> |
| Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org> |
| Signed-off-by: Sasha Levin <sashal@kernel.org> |
| --- |
| include/linux/swap.h | 6 ------ |
| mm/internal.h | 10 ++++++++++ |
| 2 files changed, 10 insertions(+), 6 deletions(-) |
| |
| diff --git a/include/linux/swap.h b/include/linux/swap.h |
| index 2228907d08ffd..d13617c7bcc4f 100644 |
| --- a/include/linux/swap.h |
| +++ b/include/linux/swap.h |
| @@ -335,14 +335,8 @@ extern unsigned long vm_total_pages; |
| extern int node_reclaim_mode; |
| extern int sysctl_min_unmapped_ratio; |
| extern int sysctl_min_slab_ratio; |
| -extern int node_reclaim(struct pglist_data *, gfp_t, unsigned int); |
| #else |
| #define node_reclaim_mode 0 |
| -static inline int node_reclaim(struct pglist_data *pgdat, gfp_t mask, |
| - unsigned int order) |
| -{ |
| - return 0; |
| -} |
| #endif |
| |
| extern int page_evictable(struct page *page); |
| diff --git a/mm/internal.h b/mm/internal.h |
| index 3e2d016947479..f6df7cb8cbc0a 100644 |
| --- a/mm/internal.h |
| +++ b/mm/internal.h |
| @@ -442,6 +442,16 @@ static inline void mminit_validate_memmodel_limits(unsigned long *start_pfn, |
| #define NODE_RECLAIM_SOME 0 |
| #define NODE_RECLAIM_SUCCESS 1 |
| |
| +#ifdef CONFIG_NUMA |
| +extern int node_reclaim(struct pglist_data *, gfp_t, unsigned int); |
| +#else |
| +static inline int node_reclaim(struct pglist_data *pgdat, gfp_t mask, |
| + unsigned int order) |
| +{ |
| + return NODE_RECLAIM_NOSCAN; |
| +} |
| +#endif |
| + |
| extern int hwpoison_filter(struct page *p); |
| |
| extern u32 hwpoison_filter_dev_major; |
| -- |
| 2.20.1 |
| |