• Johannes Weiner's avatar
    mm: vmscan: drop unnecessary div0 avoidance rounding in get_scan_count() · a4fe1631
    Johannes Weiner authored
    When we calculate the relative scan pressure between the anon and file LRU
    lists, we have to assume that reclaim_stat can contain zeroes.  To avoid
    div0 crashes, we add 1 to all denominators like so:
    
            anon_prio = swappiness;
            file_prio = 200 - anon_prio;
    
    	[...]
    
            /*
             * The amount of pressure on anon vs file pages is inversely
             * proportional to the fraction of recently scanned pages on
             * each list that were recently referenced and in active use.
             */
            ap = anon_prio * (reclaim_stat->recent_scanned[0] + 1);
            ap /= reclaim_stat->recent_rotated[0] + 1;
    
            fp = file_prio * (reclaim_stat->recent_scanned[1] + 1);
            fp /= reclaim_stat->recent_rotated[1] + 1;
            spin_unlock_irq(&pgdat->lru_lock);
    
            fraction[0] = ap;
            fraction[1] = fp;
            denominator = ap + fp + 1;
    
    While reclaim_stat can contain 0, it's not actually possible for ap + fp
    to be 0.  One of anon_prio or file_prio could be zero, but they must still
    add up to 200.  And the reclaim_stat fraction, due to the +1 in there, is
    always at least 1.  So if one of the two numerators is 0, the other one
    can't be.  ap + fp is always at least 1.  Drop the + 1.
    Signed-off-by: default avatarJohannes Weiner <hannes@cmpxchg.org>
    Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
    Cc: Joonsoo Kim <iamjoonsoo.kim@lge.com>
    Cc: Michal Hocko <mhocko@suse.com>
    Cc: Minchan Kim <minchan@kernel.org>
    Cc: Rik van Riel <riel@surriel.com>
    Link: http://lkml.kernel.org/r/20200520232525.798933-8-hannes@cmpxchg.orgSigned-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
    a4fe1631
vmscan.c 124 KB