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, 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/ . Don't email: <a href=mailto:"dont@xxxxxxxxx"> email@xxxxxxxxx </a>