[patch] mm, mempolicy: migrate_to_node should only migrate to node

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



migrate_to_node() is intended to migrate a page from one source node to a 
target node.

Today, migrate_to_node() could end up migrating to any node, not only the 
target node.  This is because the page migration allocator, 
new_node_page() does not pass __GFP_THISNODE to alloc_pages_exact_node().  
This causes the target node to be preferred but allows fallback to any 
other node in order of affinity.

Prevent this by allocating with __GFP_THISNODE.  If memory is not 
available, -ENOMEM will be returned as appropriate.

Signed-off-by: David Rientjes <rientjes@xxxxxxxxxx>
---
 mm/mempolicy.c | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/mm/mempolicy.c b/mm/mempolicy.c
--- a/mm/mempolicy.c
+++ b/mm/mempolicy.c
@@ -945,7 +945,8 @@ static struct page *new_node_page(struct page *page, unsigned long node, int **x
 		return alloc_huge_page_node(page_hstate(compound_head(page)),
 					node);
 	else
-		return alloc_pages_exact_node(node, GFP_HIGHUSER_MOVABLE, 0);
+		return alloc_pages_exact_node(node, GFP_HIGHUSER_MOVABLE |
+						    __GFP_THISNODE, 0);
 }
 
 /*

--
To unsubscribe, send a message with 'unsubscribe linux-mm' in
the body to majordomo@xxxxxxxxx.  For more info on Linux MM,
see: http://www.linux-mm.org/ .
Don't email: <a href=mailto:"dont@xxxxxxxxx";> email@xxxxxxxxx </a>




[Index of Archives]     [Linux ARM Kernel]     [Linux ARM]     [Linux Omap]     [Fedora ARM]     [IETF Annouce]     [Bugtraq]     [Linux]     [Linux OMAP]     [Linux MIPS]     [ECOS]     [Asterisk Internet PBX]     [Linux API]