|
@@ -1279,10 +1279,11 @@ static inline bool is_via_compact_memory(int order)
|
|
|
return order == -1;
|
|
|
}
|
|
|
|
|
|
-static enum compact_result __compact_finished(struct zone *zone, struct compact_control *cc,
|
|
|
- const int migratetype)
|
|
|
+static enum compact_result __compact_finished(struct zone *zone,
|
|
|
+ struct compact_control *cc)
|
|
|
{
|
|
|
unsigned int order;
|
|
|
+ const int migratetype = cc->migratetype;
|
|
|
|
|
|
if (cc->contended || fatal_signal_pending(current))
|
|
|
return COMPACT_CONTENDED;
|
|
@@ -1338,12 +1339,11 @@ static enum compact_result __compact_finished(struct zone *zone, struct compact_
|
|
|
}
|
|
|
|
|
|
static enum compact_result compact_finished(struct zone *zone,
|
|
|
- struct compact_control *cc,
|
|
|
- const int migratetype)
|
|
|
+ struct compact_control *cc)
|
|
|
{
|
|
|
int ret;
|
|
|
|
|
|
- ret = __compact_finished(zone, cc, migratetype);
|
|
|
+ ret = __compact_finished(zone, cc);
|
|
|
trace_mm_compaction_finished(zone, cc->order, ret);
|
|
|
if (ret == COMPACT_NO_SUITABLE_PAGE)
|
|
|
ret = COMPACT_CONTINUE;
|
|
@@ -1476,9 +1476,9 @@ static enum compact_result compact_zone(struct zone *zone, struct compact_contro
|
|
|
enum compact_result ret;
|
|
|
unsigned long start_pfn = zone->zone_start_pfn;
|
|
|
unsigned long end_pfn = zone_end_pfn(zone);
|
|
|
- const int migratetype = gfpflags_to_migratetype(cc->gfp_mask);
|
|
|
const bool sync = cc->mode != MIGRATE_ASYNC;
|
|
|
|
|
|
+ cc->migratetype = gfpflags_to_migratetype(cc->gfp_mask);
|
|
|
ret = compaction_suitable(zone, cc->order, cc->alloc_flags,
|
|
|
cc->classzone_idx);
|
|
|
/* Compaction is likely to fail */
|
|
@@ -1528,8 +1528,7 @@ static enum compact_result compact_zone(struct zone *zone, struct compact_contro
|
|
|
|
|
|
migrate_prep_local();
|
|
|
|
|
|
- while ((ret = compact_finished(zone, cc, migratetype)) ==
|
|
|
- COMPACT_CONTINUE) {
|
|
|
+ while ((ret = compact_finished(zone, cc)) == COMPACT_CONTINUE) {
|
|
|
int err;
|
|
|
|
|
|
switch (isolate_migratepages(zone, cc)) {
|