|
@@ -1437,6 +1437,7 @@ static unsigned long isolate_lru_pages(unsigned long nr_to_scan,
|
|
unsigned long nr_taken = 0;
|
|
unsigned long nr_taken = 0;
|
|
unsigned long nr_zone_taken[MAX_NR_ZONES] = { 0 };
|
|
unsigned long nr_zone_taken[MAX_NR_ZONES] = { 0 };
|
|
unsigned long nr_skipped[MAX_NR_ZONES] = { 0, };
|
|
unsigned long nr_skipped[MAX_NR_ZONES] = { 0, };
|
|
|
|
+ unsigned long skipped = 0, total_skipped = 0;
|
|
unsigned long scan, nr_pages;
|
|
unsigned long scan, nr_pages;
|
|
LIST_HEAD(pages_skipped);
|
|
LIST_HEAD(pages_skipped);
|
|
|
|
|
|
@@ -1488,14 +1489,13 @@ static unsigned long isolate_lru_pages(unsigned long nr_to_scan,
|
|
*/
|
|
*/
|
|
if (!list_empty(&pages_skipped)) {
|
|
if (!list_empty(&pages_skipped)) {
|
|
int zid;
|
|
int zid;
|
|
- unsigned long total_skipped = 0;
|
|
|
|
|
|
|
|
for (zid = 0; zid < MAX_NR_ZONES; zid++) {
|
|
for (zid = 0; zid < MAX_NR_ZONES; zid++) {
|
|
if (!nr_skipped[zid])
|
|
if (!nr_skipped[zid])
|
|
continue;
|
|
continue;
|
|
|
|
|
|
__count_zid_vm_events(PGSCAN_SKIP, zid, nr_skipped[zid]);
|
|
__count_zid_vm_events(PGSCAN_SKIP, zid, nr_skipped[zid]);
|
|
- total_skipped += nr_skipped[zid];
|
|
|
|
|
|
+ skipped += nr_skipped[zid];
|
|
}
|
|
}
|
|
|
|
|
|
/*
|
|
/*
|
|
@@ -1503,13 +1503,14 @@ static unsigned long isolate_lru_pages(unsigned long nr_to_scan,
|
|
* close to unreclaimable. If the LRU list is empty, account
|
|
* close to unreclaimable. If the LRU list is empty, account
|
|
* skipped pages as a full scan.
|
|
* skipped pages as a full scan.
|
|
*/
|
|
*/
|
|
- scan += list_empty(src) ? total_skipped : total_skipped >> 2;
|
|
|
|
|
|
+ total_skipped = list_empty(src) ? skipped : skipped >> 2;
|
|
|
|
|
|
list_splice(&pages_skipped, src);
|
|
list_splice(&pages_skipped, src);
|
|
}
|
|
}
|
|
- *nr_scanned = scan;
|
|
|
|
- trace_mm_vmscan_lru_isolate(sc->reclaim_idx, sc->order, nr_to_scan, scan,
|
|
|
|
- nr_taken, mode, is_file_lru(lru));
|
|
|
|
|
|
+ *nr_scanned = scan + total_skipped;
|
|
|
|
+ trace_mm_vmscan_lru_isolate(sc->reclaim_idx, sc->order, nr_to_scan,
|
|
|
|
+ scan, skipped, nr_taken, mode,
|
|
|
|
+ is_file_lru(lru));
|
|
update_lru_sizes(lruvec, lru, nr_zone_taken);
|
|
update_lru_sizes(lruvec, lru, nr_zone_taken);
|
|
return nr_taken;
|
|
return nr_taken;
|
|
}
|
|
}
|