Skip to content
  • Hugh Dickins's avatar
    mm: update_lru_size warn and reset bad lru_size · ca707239
    Hugh Dickins authored
    
    
    Though debug kernels have a VM_BUG_ON to help protect from misaccounting
    lru_size, non-debug kernels are liable to wrap it around: and then the
    vast unsigned long size draws page reclaim into a loop of repeatedly
    doing nothing on an empty list, without even a cond_resched().
    
    That soft lockup looks confusingly like an over-busy reclaim scenario,
    with lots of contention on the lru_lock in shrink_inactive_list(): yet
    has a totally different origin.
    
    Help differentiate with a custom warning in
    mem_cgroup_update_lru_size(), even in non-debug kernels; and reset the
    size to avoid the lockup.  But the particular bug which suggested this
    change was mine alone, and since fixed.
    
    Make it a WARN_ONCE: the first occurrence is the most informative, a
    flurry may follow, yet even when rate-limited little more is learnt.
    
    Signed-off-by: default avatarHugh Dickins <hughd@google.com>
    Cc: "Kirill A. Shutemov" <kirill.shutemov@linux.intel.com>
    Cc: Andrea Arcangeli <aarcange@redhat.com>
    Cc: Andres Lagar-Cavilla <andreslc@google.com>
    Cc: Yang Shi <yang.shi@linaro.org>
    Cc: Ning Qu <quning@gmail.com>
    Cc: Mel Gorman <mgorman@techsingularity.net>
    Cc: Andres Lagar-Cavilla <andreslc@google.com>
    Cc: Konstantin Khlebnikov <koct9i@gmail.com>
    Cc: Michal Hocko <mhocko@kernel.org>
    Cc: Johannes Weiner <hannes@cmpxchg.org>
    Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
    Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
    ca707239