>> diff --git a/mm/sparse.c b/mm/sparse.c >> index 781fa04..a6984d9 100644 >> --- a/mm/sparse.c >> +++ b/mm/sparse.c >> @@ -75,6 +75,20 @@ static struct mem_section noinline __init_refok *sparse_index_alloc(int nid) >> return section; >> } >> >> +static inline void __meminit sparse_index_free(struct mem_section *section) >> +{ >> + unsigned long size = SECTIONS_PER_ROOT * >> + sizeof(struct mem_section); >> + >> + if (!section) >> + return; >> + >> + if (slab_is_available()) >> + kfree(section); >> + else >> + free_bootmem(virt_to_phys(section), size); > >Eek, does that work? > David, I think it's working fine. If my understanding is wrong, please correct me. Thanks a lot :-) The "section" allocated from the bootmem allocator might take following function call path. In the function alloc_bootmem_core(), all online nodes will be checked for the memory allocation. So we could have memory allocated from different node other than the specified one to alloc_bootmem_node() alloc_bootmem_node(nid, size) __alloc_bootmem_node() ___alloc_bootmem_node_nopanic() alloc_bootmem_core() On the other hand, function free_bootmem() checks which node the memory block belongs to and then free it into that node. That looks reasonable. Thanks, Gavin >> +} >> + >> static int __meminit sparse_index_init(unsigned long section_nr, int nid) >> { >> static DEFINE_SPINLOCK(index_init_lock); >> @@ -102,6 +116,9 @@ static int __meminit sparse_index_init(unsigned long section_nr, int nid) >> mem_section[root] = section; >> out: >> spin_unlock(&index_init_lock); >> + if (ret) >> + sparse_index_free(section); >> + >> return ret; >> } >> #else /* !SPARSEMEM_EXTREME */ > >-- >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> > -- 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>