• Tang Chen's avatar
    mem-hotplug: reset node managed pages when hot-adding a new pgdat · 0cc5277d
    Tang Chen authored
    commit f784a3f1 upstream.
    
    In free_area_init_core(), zone->managed_pages is set to an approximate
    value for lowmem, and will be adjusted when the bootmem allocator frees
    pages into the buddy system.
    
    But free_area_init_core() is also called by hotadd_new_pgdat() when
    hot-adding memory.  As a result, zone->managed_pages of the newly added
    node's pgdat is set to an approximate value in the very beginning.
    
    Even if the memory on that node has node been onlined,
    /sys/device/system/node/nodeXXX/meminfo has wrong value:
    
      hot-add node2 (memory not onlined)
      cat /sys/device/system/node/node2/meminfo
      Node 2 MemTotal:       33554432 kB
      Node 2 MemFree:               0 kB
      Node 2 MemUsed:        33554432 kB
      Node 2 Active:                0 kB
    
    This patch fixes this problem by reset node managed pages to 0 after
    hot-adding a new node.
    
    1. Move reset_managed_pages_done from reset_node_managed_pages() to
       reset_all_zones_managed_pages()
    2. Make reset_node_managed_pages() non-static
    3. Call reset_node_managed_pages() in hotadd_new_pgdat() after pgdat
       is initialized
    Signed-off-by: default avatarTang Chen <tangchen@cn.fujitsu.com>
    Signed-off-by: default avatarYasuaki Ishimatsu <isimatu.yasuaki@jp.fujitsu.com>
    Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
    Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
    Signed-off-by: default avatarLuis Henriques <luis.henriques@canonical.com>
    0cc5277d
memory_hotplug.c 50.3 KB