• Hugh Dickins's avatar
    memcgroup: fix zone isolation OOM · 436c6541
    Hugh Dickins authored
    mem_cgroup_charge_common shows a tendency to OOM without good reason, when
    a memhog goes well beyond its rss limit but with plenty of swap available.
    Seen on x86 but not on PowerPC; seen when the next patch omits swapcache
    from memcgroup, but we presume it can happen without.
    
    mem_cgroup_isolate_pages is not quite satisfying reclaim's criteria for OOM
    avoidance.  Already it has to scan beyond the nr_to_scan limit when it
    finds a !LRU page or an active page when handling inactive or an inactive
    page when handling active.  It needs to do exactly the same when it finds a
    page from the wrong zone (the x86 tests had two zones, the PowerPC tests
    had only one).
    
    Don't increment scan and then decrement it in these cases, just move the
    incrementation down.  Fix recent off-by-one when checking against
    nr_to_scan.  Cut out "Check if the meta page went away from under us",
    presumably left over from early debugging: no amount of such checks could
    save us if this list really were being updated without locking.
    
    This change does make the unlimited scan while holding two spinlocks
    even worse - bad for latency and bad for containment; but that's a
    separate issue which is better left to be fixed a little later.
    Signed-off-by: default avatarHugh Dickins <hugh@veritas.com>
    Cc: Pavel Emelianov <xemul@openvz.org>
    Acked-by: default avatarBalbir Singh <balbir@linux.vnet.ibm.com>
    Cc: Paul Menage <menage@google.com>
    Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>
    Cc: "Eric W. Biederman" <ebiederm@xmission.com>
    Cc: Nick Piggin <nickpiggin@yahoo.com.au>
    Cc: Kirill Korotaev <dev@sw.ru>
    Cc: Herbert Poetzl <herbert@13thfloor.at>
    Cc: David Rientjes <rientjes@google.com>
    Cc: Vaidyanathan Srinivasan <svaidy@linux.vnet.ibm.com>
    Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
    Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
    436c6541
memcontrol.c 17.1 KB