[BUG] [PATCH v2] Make setup_zone_migrate_reserve() aware of overlapping nodes

Previous message: [thread] [date] [author]
Next message: [thread] [date] [author]
From: Adam Litke
Date: Wednesday, August 20, 2008 - 12:55 pm

Changes since V1
     - Fix build for !NUMA
     - Add VM_BUG_ON() to catch this problem at the source
    
    I have gotten to the root cause of the hugetlb badness I reported back on
    August 15th.  My system has the following memory topology (note the
    overlapping node):
    
            Node 0 Memory: 0x8000000-0x44000000
            Node 1 Memory: 0x0-0x8000000 0x44000000-0x80000000
    
    setup_zone_migrate_reserve() scans the address range 0x0-0x8000000 looking
    for a pageblock to move onto the MIGRATE_RESERVE list.  Finding no
    candidates, it happily continues the scan into 0x8000000-0x44000000.  When
    a pageblock is found, the pages are moved to the MIGRATE_RESERVE list on
    the wrong zone.  Oops.
    
    (Andrew: once the proper fix is agreed upon, this should also be a
    candidate for -stable.)
    
    setup_zone_migrate_reserve() should skip pageblocks in overlapping nodes.
    
    Signed-off-by: Adam Litke <agl@us.ibm.com>

diff --git a/mm/page_alloc.c b/mm/page_alloc.c
index af982f7..feb7916 100644
--- a/mm/page_alloc.c
+++ b/mm/page_alloc.c
@@ -694,6 +694,9 @@ static int move_freepages(struct zone *zone,
 #endif
 
 	for (page = start_page; page <= end_page;) {
+		/* Make sure we are not inadvertently changing nodes */
+		VM_BUG_ON(page_to_nid(page) != zone_to_nid(zone));
+
 		if (!pfn_valid_within(page_to_pfn(page))) {
 			page++;
 			continue;
@@ -2516,6 +2519,10 @@ static void setup_zone_migrate_reserve(struct zone *zone)
 			continue;
 		page = pfn_to_page(pfn);
 
+		/* Watch out for overlapping nodes */
+		if (page_to_nid(page) != zone_to_nid(zone))
+			continue;
+
 		/* Blocks with reserved pages will never free, skip them. */
 		if (PageReserved(page))
 			continue;

-- 
Adam Litke - (agl at us.ibm.com)
IBM Linux Technology Center

--
Previous message: [thread] [date] [author]
Next message: [thread] [date] [author]

Messages in current thread:
[BUG] __GFP_THISNODE is not always honored, Adam Litke, (Fri Aug 15, 3:01 pm)
Re: [BUG] __GFP_THISNODE is not always honored, Mel Gorman, (Mon Aug 18, 3:59 am)
Re: [BUG] __GFP_THISNODE is not always honored, Adam Litke, (Mon Aug 18, 11:16 am)
Re: [BUG] __GFP_THISNODE is not always honored, Christoph Lameter, (Mon Aug 18, 12:14 pm)
Re: [BUG] __GFP_THISNODE is not always honored, Christoph Lameter, (Mon Aug 18, 12:21 pm)
Re: [BUG] __GFP_THISNODE is not always honored, Mel Gorman, (Mon Aug 18, 12:52 pm)
Re: [BUG] __GFP_THISNODE is not always honored, Mel Gorman, (Mon Aug 18, 12:57 pm)
[BUG] [PATCH v2] Make setup_zone_migrate_reserve() aware o ..., Adam Litke, (Wed Aug 20, 12:55 pm)