diff options
author | Vlastimil Babka <vbabka@suse.cz> | 2016-10-07 19:57:53 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2016-10-07 21:46:27 -0400 |
commit | 9861a62c335cd34a2b6b25aaaf5898e8370299ec (patch) | |
tree | 4eb21fe16acfb2e229422de1927bfcb152781829 /mm/compaction.c | |
parent | f2b8228c5f99a92bc07efd36f8dc840e0705a266 (diff) |
mm, compaction: create compact_gap wrapper
Compaction uses a watermark gap of (2UL << order) pages at various
places and it's not immediately obvious why. Abstract it through a
compact_gap() wrapper to create a single place with a thorough
explanation.
[vbabka@suse.cz: clarify the comment of compact_gap()]
Link: http://lkml.kernel.org/r/7b6aed1f-fdf8-2063-9ff4-bbe4de712d37@suse.cz
Link: http://lkml.kernel.org/r/20160810091226.6709-9-vbabka@suse.cz
Signed-off-by: Vlastimil Babka <vbabka@suse.cz>
Tested-by: Lorenzo Stoakes <lstoakes@gmail.com>
Acked-by: Michal Hocko <mhocko@suse.com>
Cc: Mel Gorman <mgorman@techsingularity.net>
Cc: Joonsoo Kim <iamjoonsoo.kim@lge.com>
Cc: David Rientjes <rientjes@google.com>
Cc: Rik van Riel <riel@redhat.com>
Signed-off-by: Vlastimil Babka <vbabka@suse.cz>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Diffstat (limited to 'mm/compaction.c')
-rw-r--r-- | mm/compaction.c | 7 |
1 files changed, 3 insertions, 4 deletions
diff --git a/mm/compaction.c b/mm/compaction.c index e2618ac062a6..bbf41ee99142 100644 --- a/mm/compaction.c +++ b/mm/compaction.c | |||
@@ -1391,11 +1391,10 @@ static enum compact_result __compaction_suitable(struct zone *zone, int order, | |||
1391 | return COMPACT_SUCCESS; | 1391 | return COMPACT_SUCCESS; |
1392 | 1392 | ||
1393 | /* | 1393 | /* |
1394 | * Watermarks for order-0 must be met for compaction. Note the 2UL. | 1394 | * Watermarks for order-0 must be met for compaction to be able to |
1395 | * This is because during migration, copies of pages need to be | 1395 | * isolate free pages for migration targets. |
1396 | * allocated and for a short time, the footprint is higher | ||
1397 | */ | 1396 | */ |
1398 | watermark = low_wmark_pages(zone) + (2UL << order); | 1397 | watermark = low_wmark_pages(zone) + compact_gap(order); |
1399 | if (!__zone_watermark_ok(zone, 0, watermark, classzone_idx, | 1398 | if (!__zone_watermark_ok(zone, 0, watermark, classzone_idx, |
1400 | alloc_flags, wmark_target)) | 1399 | alloc_flags, wmark_target)) |
1401 | return COMPACT_SKIPPED; | 1400 | return COMPACT_SKIPPED; |