• Michal Hocko's avatar
    memcg: fix thresholds for 32b architectures. · c12176d3
    Michal Hocko authored
    Commit 424cdc14 ("memcg: convert threshold to bytes") has fixed a
    regression introduced by 3e32cb2e ("mm: memcontrol: lockless page
    counters") where thresholds were silently converted to use page units
    rather than bytes when interpreting the user input.
    The fix is not complete, though, as properly pointed out by Ben Hutchings
    during stable backport review.  The page count is converted to bytes but
    unsigned long is used to hold the value which would be obviously not
    sufficient for 32b systems with more than 4G thresholds.  The same applies
    to usage as taken from mem_cgroup_usage which might overflow.
    Let's remove this bytes vs.  pages internal tracking differences and
    handle thresholds in page units internally.  Chage mem_cgroup_usage() to
    return the value in page units and revert 424cdc14 because this should
    be sufficient for the consistent handling.  mem_cgroup_read_u64 as the
    only users of mem_cgroup_usage outside of the threshold handling code is
    converted to give the proper in bytes result.  It is doing that already
    for page_counter output so this is more consistent as well.
    The value presented to the userspace is still in bytes units.
    Fixes: 424cdc14 ("memcg: convert threshold to bytes")
    Fixes: 3e32cb2e ("mm: memcontrol: lockless page counters")
    Signed-off-by: default avatarMichal Hocko <mhocko@suse.com>
    Reported-by: default avatarBen Hutchings <ben@decadent.org.uk>
    Reviewed-by: default avatarVladimir Davydov <vdavydov@virtuozzo.com>
    Acked-by: default avatarJohannes Weiner <hannes@cmpxchg.org>
    Cc: <stable@vger.kernel.org>
    From: Michal Hocko <mhocko@kernel.org>
    Subject: memcg-fix-thresholds-for-32b-architectures-fix
    Cc: Ben Hutchings <ben@decadent.org.uk>
    Cc: Vladimir Davydov <vdavydov@virtuozzo.com>
    Cc: Johannes Weiner <hannes@cmpxchg.org>
    From: Andrew Morton <akpm@linux-foundation.org>
    Subject: memcg-fix-thresholds-for-32b-architectures-fix-fix
    don't attempt to inline mem_cgroup_usage()
    The compiler ignores the inline anwyay.  And __always_inlining it adds 600
    bytes of goop to the .o file.
    Cc: Ben Hutchings <ben@decadent.org.uk>
    Cc: Johannes Weiner <hannes@cmpxchg.org>
    Cc: Michal Hocko <mhocko@kernel.org>
    Cc: Vladimir Davydov <vdavydov@virtuozzo.com>
    Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
    Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
memcontrol.c 145 KB