|
@@ -1761,15 +1761,17 @@ static void get_scan_count(struct lruvec *lruvec, struct scan_control *sc,
|
|
out:
|
|
out:
|
|
for_each_evictable_lru(lru) {
|
|
for_each_evictable_lru(lru) {
|
|
int file = is_file_lru(lru);
|
|
int file = is_file_lru(lru);
|
|
|
|
+ unsigned long size;
|
|
unsigned long scan;
|
|
unsigned long scan;
|
|
|
|
|
|
- scan = get_lru_size(lruvec, lru);
|
|
|
|
|
|
+ size = get_lru_size(lruvec, lru);
|
|
if (sc->priority || noswap || !vmscan_swappiness(sc)) {
|
|
if (sc->priority || noswap || !vmscan_swappiness(sc)) {
|
|
- scan >>= sc->priority;
|
|
|
|
|
|
+ scan = size >> sc->priority;
|
|
if (!scan && force_scan)
|
|
if (!scan && force_scan)
|
|
- scan = SWAP_CLUSTER_MAX;
|
|
|
|
|
|
+ scan = min(size, SWAP_CLUSTER_MAX);
|
|
scan = div64_u64(scan * fraction[file], denominator);
|
|
scan = div64_u64(scan * fraction[file], denominator);
|
|
- }
|
|
|
|
|
|
+ } else
|
|
|
|
+ scan = size;
|
|
nr[lru] = scan;
|
|
nr[lru] = scan;
|
|
}
|
|
}
|
|
}
|
|
}
|