• Yu Zhao's avatar
    mm: free compound page with correct order · 5ddacbe9
    Yu Zhao authored
    Compound page should be freed by put_page() or free_pages() with correct
    order.  Not doing so will cause tail pages leaked.
    
    The compound order can be obtained by compound_order() or use
    HPAGE_PMD_ORDER in our case.  Some people would argue the latter is
    faster but I prefer the former which is more general.
    
    This bug was observed not just on our servers (the worst case we saw is
    11G leaked on a 48G machine) but also on our workstations running Ubuntu
    based distro.
    
      $ cat /proc/vmstat  | grep thp_zero_page_alloc
      thp_zero_page_alloc 55
      thp_zero_page_alloc_failed 0
    
    This means there is (thp_zero_page_alloc - 1) * (2M - 4K) memory leaked.
    
    Fixes: 97ae1749 ("thp: implement refcounting for huge zero page")
    Signed-off-by: default avatarYu Zhao <yuzhao@google.com>
    Acked-by: default avatarKirill A. Shutemov <kirill.shutemov@linux.intel.com>
    Cc: Andrea Arcangeli <aarcange@redhat.com>
    Cc: Mel Gorman <mel@csn.ul.ie>
    Cc: David Rientjes <rientjes@google.com>
    Cc: Bob Liu <lliubbo@gmail.com>
    Cc: <stable@vger.kernel.org>	[3.8+]
    Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
    Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
    5ddacbe9
huge_memory.c 78.1 KB