• Johannes Weiner's avatar
    mm: page_counter: mitigate consequences of a page_counter underflow · 9317d0ff
    Johannes Weiner authored
    When the unsigned page_counter underflows, even just by a few pages, a
    cgroup will not be able to run anything afterwards and trigger the OOM
    killer in a loop.
    
    Underflows shouldn't happen, but when they do in practice, we may just be
    off by a small amount that doesn't interfere with the normal operation -
    consequences don't need to be that dire.
    
    Reset the page_counter to 0 upon underflow.  We'll issue a warning that
    the accounting will be off and then try to keep limping along.
    
    [ We used to do this with the original res_counter, where it was a
      more straight-forward correction inside the spinlock section. I
      didn't carry it forward into the lockless page counters for
      simplicity, but it turns out this is quite useful in practice. ]
    
    Link: https://lkml.kernel.org/r/20210408143155.2679744-1-hannes@cmpxchg.org
    
    Signed-off-by: default avatarJohannes Weiner <hannes@cmpxchg.org>
    Acked-by: default avatarMichal Hocko <mhocko@suse.com>
    Acked-by: Chris Down <chris@chrisd...
    9317d0ff
page_counter.c 6.76 KB