diff options
Diffstat (limited to 'mm/vmscan.c')
-rw-r--r-- | mm/vmscan.c | 10 |
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 | /* |