• Christoph Lameter's avatar
    [PATCH] slab: fix two issues in kmalloc_node / __cache_alloc_node · 5bcd234d
    Christoph Lameter authored
    This addresses two issues:
    
    1. Kmalloc_node() may intermittently return NULL if we are allocating
       from the current node and are unable to obtain memory for the current
       node from the page allocator.  This is because we call ___cache_alloc()
       if nodeid == numa_node_id() and ____cache_alloc is not able to fallback
       to other nodes.
    
       This was introduced in the 2.6.19 development cycle.  <= 2.6.18 in
       that case does not do a restricted allocation and blindly trusts the
       page allocator to have given us memory from the indicated node.  It
       inserts the page regardless of the node it came from into the queues for
       the current node.
    
    2. If kmalloc_node() is used on a node that has not been bootstrapped
       yet then we may try to pass an invalid node number to
       ____cache_alloc_node() triggering a BUG().
    
       Change the function to call fallback_alloc() instead.  Only call
       fallback_alloc() if we are allowed to fallback at all.  The need to
       handle a node not bootstrapped yet also first surfaced in the 2.6.19
       cycle.
    
    Update the comments since they were still describing the old kmalloc_node
    from 2.6.12.
    Signed-off-by: default avatarChristoph Lameter <clameter@sgi.com>
    Signed-off-by: default avatarAndrew Morton <akpm@osdl.org>
    Signed-off-by: default avatarLinus Torvalds <torvalds@osdl.org>
    5bcd234d
slab.c 112 KB