|
@@ -494,12 +494,13 @@ static int compact_zone(struct zone *zone, struct compact_control *cc)
|
|
|
|
|
|
while ((ret = compact_finished(zone, cc)) == COMPACT_CONTINUE) {
|
|
|
unsigned long nr_migrate, nr_remaining;
|
|
|
+ int err;
|
|
|
|
|
|
if (!isolate_migratepages(zone, cc))
|
|
|
continue;
|
|
|
|
|
|
nr_migrate = cc->nr_migratepages;
|
|
|
- migrate_pages(&cc->migratepages, compaction_alloc,
|
|
|
+ err = migrate_pages(&cc->migratepages, compaction_alloc,
|
|
|
(unsigned long)cc, false,
|
|
|
cc->sync);
|
|
|
update_nr_listpages(cc);
|
|
@@ -513,7 +514,7 @@ static int compact_zone(struct zone *zone, struct compact_control *cc)
|
|
|
nr_remaining);
|
|
|
|
|
|
/* Release LRU pages not migrated */
|
|
|
- if (!list_empty(&cc->migratepages)) {
|
|
|
+ if (err) {
|
|
|
putback_lru_pages(&cc->migratepages);
|
|
|
cc->nr_migratepages = 0;
|
|
|
}
|