diff options
Diffstat (limited to 'mm')
-rw-r--r-- | mm/vmscan.c | 23 |
1 files changed, 13 insertions, 10 deletions
diff --git a/mm/vmscan.c b/mm/vmscan.c index 04c49fe781fe..a0245861934a 100644 --- a/mm/vmscan.c +++ b/mm/vmscan.c | |||
@@ -2510,18 +2510,18 @@ loop_again: | |||
2510 | KSWAPD_ZONE_BALANCE_GAP_RATIO); | 2510 | KSWAPD_ZONE_BALANCE_GAP_RATIO); |
2511 | if (!zone_watermark_ok_safe(zone, order, | 2511 | if (!zone_watermark_ok_safe(zone, order, |
2512 | high_wmark_pages(zone) + balance_gap, | 2512 | high_wmark_pages(zone) + balance_gap, |
2513 | end_zone, 0)) | 2513 | end_zone, 0)) { |
2514 | shrink_zone(priority, zone, &sc); | 2514 | shrink_zone(priority, zone, &sc); |
2515 | reclaim_state->reclaimed_slab = 0; | ||
2516 | nr_slab = shrink_slab(&shrink, sc.nr_scanned, lru_pages); | ||
2517 | sc.nr_reclaimed += reclaim_state->reclaimed_slab; | ||
2518 | total_scanned += sc.nr_scanned; | ||
2519 | 2515 | ||
2520 | if (zone->all_unreclaimable) | 2516 | reclaim_state->reclaimed_slab = 0; |
2521 | continue; | 2517 | nr_slab = shrink_slab(&shrink, sc.nr_scanned, lru_pages); |
2522 | if (nr_slab == 0 && | 2518 | sc.nr_reclaimed += reclaim_state->reclaimed_slab; |
2523 | !zone_reclaimable(zone)) | 2519 | total_scanned += sc.nr_scanned; |
2524 | zone->all_unreclaimable = 1; | 2520 | |
2521 | if (nr_slab == 0 && !zone_reclaimable(zone)) | ||
2522 | zone->all_unreclaimable = 1; | ||
2523 | } | ||
2524 | |||
2525 | /* | 2525 | /* |
2526 | * If we've done a decent amount of scanning and | 2526 | * If we've done a decent amount of scanning and |
2527 | * the reclaim ratio is low, start doing writepage | 2527 | * the reclaim ratio is low, start doing writepage |
@@ -2531,6 +2531,9 @@ loop_again: | |||
2531 | total_scanned > sc.nr_reclaimed + sc.nr_reclaimed / 2) | 2531 | total_scanned > sc.nr_reclaimed + sc.nr_reclaimed / 2) |
2532 | sc.may_writepage = 1; | 2532 | sc.may_writepage = 1; |
2533 | 2533 | ||
2534 | if (zone->all_unreclaimable) | ||
2535 | continue; | ||
2536 | |||
2534 | if (!zone_watermark_ok_safe(zone, order, | 2537 | if (!zone_watermark_ok_safe(zone, order, |
2535 | high_wmark_pages(zone), end_zone, 0)) { | 2538 | high_wmark_pages(zone), end_zone, 0)) { |
2536 | all_zones_ok = 0; | 2539 | all_zones_ok = 0; |