diff options
author | Wei Yang <richard.weiyang@gmail.com> | 2017-04-05 09:21:12 +1000 |
---|---|---|
committer | Stephen Rothwell <sfr@canb.auug.org.au> | 2017-04-05 09:21:12 +1000 |
commit | 4bc7055c7f0f9aee23aeed9001ff5530416fa069 (patch) | |
tree | 54de635fc3b8671be13978200c226f37a0b1c269 /mm | |
parent | 5560b2a6eac9664304bbbc280b007e019c491470 (diff) | |
download | linux-next-4bc7055c7f0f9aee23aeed9001ff5530416fa069.tar.gz |
mm/page_alloc: return 0 in case this node has no page within the zone
The whole memory space is divided into several zones and nodes may have no
page in some zones. In this case, the __absent_pages_in_range() would
return 0, since the range it is searching for is an empty range.
Also this happens more often to those nodes with higher memory range when
there are more nodes, which is a trend for future architectures.
This patch checks the zone range after clamp and adjustment, return 0 if
the range is an empty range.
Link: http://lkml.kernel.org/r/20170206154314.15705-1-richard.weiyang@gmail.com
Signed-off-by: Wei Yang <richard.weiyang@gmail.com>
Cc: Vlastimil Babka <vbabka@suse.cz>
Cc: Mel Gorman <mgorman@techsingularity.net>
Cc: Michal Hocko <mhocko@suse.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Diffstat (limited to 'mm')
-rw-r--r-- | mm/page_alloc.c | 5 |
1 files changed, 5 insertions, 0 deletions
diff --git a/mm/page_alloc.c b/mm/page_alloc.c index e025e620053d..4ec48c83c460 100644 --- a/mm/page_alloc.c +++ b/mm/page_alloc.c @@ -5783,6 +5783,11 @@ static unsigned long __meminit zone_absent_pages_in_node(int nid, adjust_zone_range_for_zone_movable(nid, zone_type, node_start_pfn, node_end_pfn, &zone_start_pfn, &zone_end_pfn); + + /* If this node has no page within this zone, return 0. */ + if (zone_start_pfn == zone_end_pfn) + return 0; + nr_absent = __absent_pages_in_range(nid, zone_start_pfn, zone_end_pfn); /* |