• KAMEZAWA Hiroyuki's avatar
    memcg: memory hotplug fix for notifier callback · dc19f9db
    KAMEZAWA Hiroyuki authored
    Fixes for memcg/memory hotplug.
    
    While memory hotplug allocate/free memmap, page_cgroup doesn't free
    page_cgroup at OFFLINE when page_cgroup is allocated via bootomem.
    (Because freeing bootmem requires special care.)
    
    Then, if page_cgroup is allocated by bootmem and memmap is freed/allocated
    by memory hotplug, page_cgroup->page == page is no longer true.
    
    But current MEM_ONLINE handler doesn't check it and update
    page_cgroup->page if it's not necessary to allocate page_cgroup.  (This
    was not found because memmap is not freed if SPARSEMEM_VMEMMAP is y.)
    
    And I noticed that MEM_ONLINE can be called against "part of section".
    So, freeing page_cgroup at CANCEL_ONLINE will cause trouble.  (freeing
    used page_cgroup) Don't rollback at CANCEL.
    
    One more, current memory hotplug notifier is stopped by slub because it
    sets NOTIFY_STOP_MASK to return vaule.  So, page_cgroup's callback never
    be called.  (low priority than slub now.)
    
    I think this slub's behavior is not intentional(BUG). and fixes it.
    
    Another way to be considered about page_cgroup allocation:
      - free page_cgroup at OFFLINE even if it's from bootmem
        and remove specieal handler. But it requires more changes.
    
    Addresses http://bugzilla.kernel.org/show_bug.cgi?id=12041Signed-off-by: default avatarKAMEZAWA Hiruyoki <kamezawa.hiroyu@jp.fujitsu.com>
    Cc: Li Zefan <lizf@cn.fujitsu.com>
    Cc: Balbir Singh <balbir@in.ibm.com>
    Cc: Pavel Emelyanov <xemul@openvz.org>
    Tested-by: default avatarBadari Pulavarty <pbadari@us.ibm.com>
    Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
    Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
    dc19f9db
slub.c 105 KB