• Hugh Dickins's avatar
    mm: fix check_move_unevictable_pages() on THP · 8d8869ca
    Hugh Dickins authored
    check_move_unevictable_pages() is used in making unevictable shmem pages
    evictable: by shmem_unlock_mapping(), drm_gem_check_release_pagevec() and
    i915/gem check_release_pagevec().  Those may pass down subpages of a huge
    page, when /sys/kernel/mm/transparent_hugepage/shmem_enabled is "force".
    
    That does not crash or warn at present, but the accounting of vmstats
    unevictable_pgs_scanned and unevictable_pgs_rescued is inconsistent:
    scanned being incremented on each subpage, rescued only on the head (since
    tails already appear evictable once the head has been updated).
    
    5.8 commit 5d91f31f ("mm: swap: fix vmstats for huge page") has
    established that vm_events in general (and unevictable_pgs_rescued in
    particular) should count every subpage: so follow that precedent here.
    
    Do this in such a way that if mem_cgroup_page_lruvec() is made stricter
    (to check page->mem_cgroup is always set), no problem: skip the tails
    before calling it, and add thp_nr_pages() to vmstats on the head.
    Signed-off-by: default avatarHugh Dickins <hughd@google.com>
    Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
    Reviewed-by: default avatarShakeel Butt <shakeelb@google.com>
    Acked-by: default avatarYang Shi <shy828301@gmail.com>
    Cc: Johannes Weiner <hannes@cmpxchg.org>
    Cc: Michal Hocko <mhocko@suse.com>
    Cc: Mike Kravetz <mike.kravetz@oracle.com>
    Cc: Qian Cai <cai@lca.pw>
    Link: http://lkml.kernel.org/r/alpine.LSU.2.11.2008301405000.5954@eggly.anvilsSigned-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
    8d8869ca
vmscan.c 123 KB