• L
    slub, hotplug: ignore unrelated node's hot-adding and hot-removing · b9d5ab25
    Lai Jiangshan 提交于
    SLUB only focuses on the nodes which have normal memory and it ignores the
    other node's hot-adding and hot-removing.
    
    Aka: if some memory of a node which has no onlined memory is online, but
    this new memory onlined is not normal memory (for example, highmem), we
    should not allocate kmem_cache_node for SLUB.
    
    And if the last normal memory is offlined, but the node still has memory,
    we should remove kmem_cache_node for that node.  (The current code delays
    it when all of the memory is offlined)
    
    So we only do something when marg->status_change_nid_normal > 0.
    marg->status_change_nid is not suitable here.
    
    The same problem doesn't exist in SLAB, because SLAB allocates kmem_list3
    for every node even the node don't have normal memory, SLAB tolerates
    kmem_list3 on alien nodes.  SLUB only focuses on the nodes which have
    normal memory, it don't tolerate alien kmem_cache_node.  The patch makes
    SLUB become self-compatible and avoids WARNs and BUGs in rare conditions.
    Signed-off-by: NLai Jiangshan <laijs@cn.fujitsu.com>
    Cc: David Rientjes <rientjes@google.com>
    Cc: Minchan Kim <minchan.kim@gmail.com>
    Cc: KOSAKI Motohiro <kosaki.motohiro@jp.fujitsu.com>
    Cc: Yasuaki Ishimatsu <isimatu.yasuaki@jp.fujitsu.com>
    Cc: Rob Landley <rob@landley.net>
    Cc: Andrew Morton <akpm@linux-foundation.org>
    Cc: Jiang Liu <jiang.liu@huawei.com>
    Cc: Kay Sievers <kay.sievers@vrfy.org>
    Cc: Greg Kroah-Hartman <gregkh@suse.de>
    Cc: Mel Gorman <mgorman@suse.de>
    Cc: Wen Congyang <wency@cn.fujitsu.com>
    Acked-by: NChristoph Lameter <cl@linux.com>
    Cc: Pekka Enberg <penberg@kernel.org>
    Signed-off-by: NAndrew Morton <akpm@linux-foundation.org>
    Signed-off-by: NLinus Torvalds <torvalds@linux-foundation.org>
    b9d5ab25
slub.c 129.7 KB