mm/page_owner: add zone range overlapping check
authorJoonsoo Kim <[email protected]>
Fri, 20 May 2016 00:12:13 +0000 (17:12 -0700)
committerLinus Torvalds <[email protected]>
Fri, 20 May 2016 02:12:14 +0000 (19:12 -0700)
There is a system thats node's pfns are overlapped as follows:

  -----pfn-------->
  N0 N1 N2 N0 N1 N2

Therefore, we need to care this overlapping when iterating pfn range.

There are one place in page_owner.c that iterates pfn range and it
doesn't consider this overlapping.  Add it.

Without this patch, above system could over count early allocated page
number before page_owner is activated.

Signed-off-by: Joonsoo Kim <[email protected]>
Acked-by: Vlastimil Babka <[email protected]>
Cc: Rik van Riel <[email protected]>
Cc: Johannes Weiner <[email protected]>
Cc: Mel Gorman <[email protected]>
Cc: Laura Abbott <[email protected]>
Cc: Minchan Kim <[email protected]>
Cc: Marek Szyprowski <[email protected]>
Cc: Michal Nazarewicz <[email protected]>
Cc: "Aneesh Kumar K.V" <[email protected]>
Cc: "Rafael J. Wysocki" <[email protected]>
Cc: Benjamin Herrenschmidt <[email protected]>
Cc: Paul Mackerras <[email protected]>
Cc: Michael Ellerman <[email protected]>
Signed-off-by: Andrew Morton <[email protected]>
Signed-off-by: Linus Torvalds <[email protected]>
mm/page_owner.c

index ac3d8d129974398cb98bf0bbf2b56207fdc18642..438768c092acbf89faa19338688b947d0b0f81c3 100644 (file)
@@ -301,6 +301,9 @@ static void init_pages_in_zone(pg_data_t *pgdat, struct zone *zone)
 
                        page = pfn_to_page(pfn);
 
+                       if (page_zone(page) != zone)
+                               continue;
+
                        /*
                         * We are safe to check buddy flag and order, because
                         * this is init stage and only single thread runs.