aboutsummaryrefslogtreecommitdiffstats
path: root/mm/vmscan.c
diff options
context:
space:
mode:
Diffstat (limited to 'mm/vmscan.c')
-rw-r--r--mm/vmscan.c10
1 files changed, 10 insertions, 0 deletions
diff --git a/mm/vmscan.c b/mm/vmscan.c
index d7dad2a4e69c..b2b4c4a0ada2 100644
--- a/mm/vmscan.c
+++ b/mm/vmscan.c
@@ -2919,6 +2919,8 @@ out:
2919 * and it is potentially going to sleep here. 2919 * and it is potentially going to sleep here.
2920 */ 2920 */
2921 if (order) { 2921 if (order) {
2922 int zones_need_compaction = 1;
2923
2922 for (i = 0; i <= end_zone; i++) { 2924 for (i = 0; i <= end_zone; i++) {
2923 struct zone *zone = pgdat->node_zones + i; 2925 struct zone *zone = pgdat->node_zones + i;
2924 2926
@@ -2939,9 +2941,17 @@ out:
2939 goto loop_again; 2941 goto loop_again;
2940 } 2942 }
2941 2943
2944 /* Check if the memory needs to be defragmented. */
2945 if (zone_watermark_ok(zone, order,
2946 low_wmark_pages(zone), *classzone_idx, 0))
2947 zones_need_compaction = 0;
2948
2942 /* If balanced, clear the congested flag */ 2949 /* If balanced, clear the congested flag */
2943 zone_clear_flag(zone, ZONE_CONGESTED); 2950 zone_clear_flag(zone, ZONE_CONGESTED);
2944 } 2951 }
2952
2953 if (zones_need_compaction)
2954 compact_pgdat(pgdat, order);
2945 } 2955 }
2946 2956
2947 /* 2957 /*