• Hugh Dickins's avatar
    memcg,thp: fix res_counter:96 regression · 62ade86a
    Hugh Dickins authored
    Occasionally, testing memcg's move_charge_at_immigrate on rc7 shows
    a flurry of hundreds of warnings at kernel/res_counter.c:96, where
    res_counter_uncharge_locked() does WARN_ON(counter->usage < val).
    
    The first trace of each flurry implicates __mem_cgroup_cancel_charge()
    of mc.precharge, and an audit of mc.precharge handling points to
    mem_cgroup_move_charge_pte_range()'s THP handling in commit 12724850
    ("memcg: avoid THP split in task migration").
    
    Checking !mc.precharge is good everywhere else, when a single page is to
    be charged; but here the "mc.precharge -= HPAGE_PMD_NR" likely to
    follow, is liable to result in underflow (a lot can change since the
    precharge was estimated).
    
    Simply check against HPAGE_PMD_NR: there's probably a better
    alternative, trying precharge for more, splitting if unsuccessful; but
    this one-liner is safer for now - no kernel/res_counter.c:96 warnings
    seen in 26 hours.
    Signed-off-by: default avatarHugh Dickins <hughd@google.com>
    Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
    62ade86a
memcontrol.c 147 KB