Re: [patch] mm, debug: test for online nid when allocating on single node

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

 



On Thu, 24 Nov 2011, Mel Gorman wrote:

> > Calling alloc_pages_exact_node() means the allocation only passes the
> > zonelist of a single node into the page allocator.  If that node isn't
> > online, it's zonelist may never have been initialized causing a strange
> > oops that may not immediately be clear.
> > 
> > I recently debugged an issue where node 0 wasn't online and an allocator
> > was passing 0 to alloc_pages_exact_node() and it resulted in a NULL
> > pointer on zonelist->_zoneref.  If CONFIG_DEBUG_VM is enabled, though, it
> > would be nice to catch this a bit earlier.
> > 
> > Signed-off-by: David Rientjes <rientjes@xxxxxxxxxx>
> 
> Acked-by: Mel Gorman <mgorman@xxxxxxx>
> 
> Out of curiousity, who was passing in the ID of an offline node to
> alloc_pages_exact_node() ?
> 

It was the block layer in blk_throtl_init() because it passes the ->node 
field of request_queue to the slab layer which uses 
alloc_pages_exact_node() and requeue_queue is allocated with __GFP_ZERO 
and ->node isn't initialized until later.  At the same time, the machine 
only has a single node online, node 1, where the crashkernel was 
allocated.  My analysis is at 
http://marc.info/?l=linux-kernel&m=132195611123426

I've worked with kernels without a node 0 very successfully since about 
2.6.18 so the VM appears pretty stable in that regard, too, which is good 
news.

--
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/ .
Fight unfair telecom internet charges in Canada: sign http://stopthemeter.ca/
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]