Thread (61 messages) 61 messages, 6 authors, 2008-01-24

Re: crash in kmem_cache_init

From: Christoph Lameter <hidden>
Date: 2008-01-22 23:12:34
Also in: linux-mm, lkml

On Wed, 23 Jan 2008, Pekka Enberg wrote:
When we call fallback_alloc() because the current node has ->nodelists set to
NULL, we end up calling kmem_getpages() with -1 as the node id which is then
translated to numa_node_id() by alloc_pages_node. But the reason we called
fallback_alloc() in the first place is because numa_node_id() doesn't have a
->nodelist which makes cache_grow() oops.
Right, if nodeid == -1 then we need to call alloc_pages... 
Essentiall a revert of 50c85a19e7b3928b5b5188524c44ffcbacdd4e35 from 2005.

But I doubt that this is it. The fallback logic was added later and it 
worked fine.


---
 mm/slab.c |    6 +++++-
 1 file changed, 5 insertions(+), 1 deletion(-)

Index: linux-2.6/mm/slab.c
===================================================================
--- linux-2.6.orig/mm/slab.c	2008-01-22 15:05:26.185452369 -0800
+++ linux-2.6/mm/slab.c	2008-01-22 15:05:59.301637009 -0800
@@ -1668,7 +1668,11 @@ static void *kmem_getpages(struct kmem_c
 	if (cachep->flags & SLAB_RECLAIM_ACCOUNT)
 		flags |= __GFP_RECLAIMABLE;
 
-	page = alloc_pages_node(nodeid, flags, cachep->gfporder);
+	if (nodeid == -1)
+		page = alloc_pages(flags, cachep->gfporder);
+	else
+		page = alloc_pages_node(nodeid, flags, cachep->gfporder);
+
 	if (!page)
 		return NULL;
 
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help