• Christoph Lameter's avatar
    SLUB: Fix NUMA / SYSFS bootstrap issue · 8ffa6875
    Christoph Lameter authored
    We need this patch in ASAP.  Patch fixes the mysterious hang that remained
    on some particular configurations with lockdep on after the first fix that
    moved the #idef CONFIG_SLUB_DEBUG to the right location.  See
    http://marc.info/?t=117963072300001&r=1&w=2
    
    The kmem_cache_node cache is very special because it is needed for NUMA
    bootstrap.  Under certain conditions (like for example if lockdep is
    enabled and significantly increases the size of spinlock_t) the structure
    may become exactly the size as one of the larger caches in the kmalloc
    array.
    
    That early during bootstrap we cannot perform merging properly.  The unique
    id for the kmem_cache_node cache will match one of the kmalloc array.
    Sysfs will complain about a duplicate directory entry.  All of this occurs
    while the console is not yet fully operational.  Thus boot may appear to be
    silently failing.
    
    The kmem_cache_node cache is very special.  During early boostrap the main
    allocation function is not operational yet and so we have to run our own
    small special alloc function during early boot.  It is also special in that
    it is never freed.
    
    We really do not want any merging on that cache.  Set the refcount -1 and
    forbid merging of slabs that have a negative refcount.
    Signed-off-by: default avatarChristoph Lameter <clameter@sgi.com>
    Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
    Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
    8ffa6875
slub.c 86 KB