• Gavin Shan's avatar
    mm/memblock: fix memory leak on extending regions · 181eb394
    Gavin Shan authored
    The overall memblock has been organized into the memory regions and
    reserved regions.  Initially, the memory regions and reserved regions are
    stored in the predetermined arrays of "struct memblock _region".  It's
    possible for the arrays to be enlarged when we have newly added regions,
    but no free space left there.  The policy here is to create double-sized
    array either by slab allocator or memblock allocator.  Unfortunately, we
    didn't free the old array, which might be allocated through slab allocator
    before.  That would cause memory leak.
    
    The patch introduces 2 variables to trace where (slab or memblock) the
    memory and reserved regions come from.  The memory for the memory or
    reserved regions will be deallocated by kfree() if that was allocated by
    slab allocator.  Thus to fix the memory leak issue.
    Signed-off-by: default avatarGavin Shan <shangw@linux.vnet.ibm.com>
    Cc: Johannes Weiner <hannes@cmpxchg.org>
    Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
    Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
    181eb394
memblock.c 26.9 KB