Skip to content
  • Mel Gorman's avatar
    mm, vmscan: Update all zone LRU sizes before updating memcg · 7ee36a14
    Mel Gorman authored
    Minchan Kim reported setting the following warning on a 32-bit system
    although it can affect 64-bit systems.
    
      WARNING: CPU: 4 PID: 1322 at mm/memcontrol.c:998 mem_cgroup_update_lru_size+0x103/0x110
      mem_cgroup_update_lru_size(f44b4000, 1, -7): zid 1 lru_size 1 but empty
      Modules linked in:
      CPU: 4 PID: 1322 Comm: cp Not tainted 4.7.0-rc4-mm1+ #143
      Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS Bochs 01/01/2011
      Call Trace:
        dump_stack+0x76/0xaf
        __warn+0xea/0x110
        ? mem_cgroup_update_lru_size+0x103/0x110
        warn_slowpath_fmt+0x3b/0x40
        mem_cgroup_update_lru_size+0x103/0x110
        isolate_lru_pages.isra.61+0x2e2/0x360
        shrink_active_list+0xac/0x2a0
        ? __delay+0xe/0x10
        shrink_node_memcg+0x53c/0x7a0
        shrink_node+0xab/0x2a0
        do_try_to_free_pages+0xc6/0x390
        try_to_free_pages+0x245/0x590
    
    LRU list contents and counts are updated separately.  Counts are updated
    before pages are added to the LRU and updated after pages are removed.
    The warning above is from a check in mem_cgroup_update_lru_size that
    ensures that list sizes of zero are empty.
    
    The problem is that node-lru needs to account for highmem pages if
    CONFIG_HIGHMEM is set.  One impact of the implementation is that the
    sizes are updated in multiple passes when pages from multiple zones were
    isolated.  This happens whether HIGHMEM is set or not.  When multiple
    zones are isolated, it's possible for a debugging check in memcg to be
    tripped.
    
    This patch forces all the zone counts to be updated before the memcg
    function is called.
    
    Link: http://lkml.kernel.org/r/1468588165-12461-6-git-send-email-mgorman@techsingularity.net
    
    
    Signed-off-by: default avatarMel Gorman <mgorman@techsingularity.net>
    Tested-by: default avatarMinchan Kim <minchan@kernel.org>
    Reported-by: default avatarMinchan Kim <minchan@kernel.org>
    Acked-by: default avatarMinchan Kim <minchan@kernel.org>
    Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
    Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
    7ee36a14