On Thu, 19 Jul 2012, Jiang Liu wrote: > I found the previous analysis of the BUG_ON() issue is incorrect after > another round of code review. > The really issue is that function early_kmem_cache_node_alloc() calls > inc_slabs_node(kmem_cache_node, node, page->objects) to increase the object > count on local node no matter whether page is allocated from local or remote > node. With current implementation it's OK because every memory node has normal > memory so page is allocated from local node. Now we are working on a patch set > to improve memory hotplug. The basic idea is to to let some memory nodes only > host ZONE_MOVABLE zone, so we could easily remove the whole memory node when > needed. That means some memory nodes have no ZONE_NORMAL/ZONE_DMA, and the > page > will be allocated from remote node in function early_kmem_cache_node_alloc(). > But early_kmem_cache_node_alloc() still increases object count on local node, > which triggers the BUG_ON eventually when removing the affected memory node.
That does not work. If the node does only have ZONE_MOVABLE then no slab object can be allocated from the zone. You need to modify the slab allocators to not allocate a per node structure for those zones and forbit all allocations from such a node. Actually that should already work because only ZONE_NORMAL nodes should get a per node structure because slab objects can only be allocated from ZONE_NORMAL. -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/