diff options
Diffstat (limited to 'mm')
-rw-r--r-- | mm/compaction.c | 7 | ||||
-rw-r--r-- | mm/vmscan.c | 3 |
2 files changed, 8 insertions, 2 deletions
diff --git a/mm/compaction.c b/mm/compaction.c index 47f717fa4233..a0e420207ebf 100644 --- a/mm/compaction.c +++ b/mm/compaction.c | |||
@@ -261,6 +261,7 @@ static isolate_migrate_t isolate_migratepages(struct zone *zone, | |||
261 | unsigned long last_pageblock_nr = 0, pageblock_nr; | 261 | unsigned long last_pageblock_nr = 0, pageblock_nr; |
262 | unsigned long nr_scanned = 0, nr_isolated = 0; | 262 | unsigned long nr_scanned = 0, nr_isolated = 0; |
263 | struct list_head *migratelist = &cc->migratepages; | 263 | struct list_head *migratelist = &cc->migratepages; |
264 | isolate_mode_t mode = ISOLATE_ACTIVE|ISOLATE_INACTIVE; | ||
264 | 265 | ||
265 | /* Do not scan outside zone boundaries */ | 266 | /* Do not scan outside zone boundaries */ |
266 | low_pfn = max(cc->migrate_pfn, zone->zone_start_pfn); | 267 | low_pfn = max(cc->migrate_pfn, zone->zone_start_pfn); |
@@ -348,9 +349,11 @@ static isolate_migrate_t isolate_migratepages(struct zone *zone, | |||
348 | continue; | 349 | continue; |
349 | } | 350 | } |
350 | 351 | ||
352 | if (!cc->sync) | ||
353 | mode |= ISOLATE_CLEAN; | ||
354 | |||
351 | /* Try isolate the page */ | 355 | /* Try isolate the page */ |
352 | if (__isolate_lru_page(page, | 356 | if (__isolate_lru_page(page, mode, 0) != 0) |
353 | ISOLATE_ACTIVE|ISOLATE_INACTIVE, 0) != 0) | ||
354 | continue; | 357 | continue; |
355 | 358 | ||
356 | VM_BUG_ON(PageTransCompound(page)); | 359 | VM_BUG_ON(PageTransCompound(page)); |
diff --git a/mm/vmscan.c b/mm/vmscan.c index ec6dbcb976d1..c007e78d7078 100644 --- a/mm/vmscan.c +++ b/mm/vmscan.c | |||
@@ -1045,6 +1045,9 @@ int __isolate_lru_page(struct page *page, isolate_mode_t mode, int file) | |||
1045 | 1045 | ||
1046 | ret = -EBUSY; | 1046 | ret = -EBUSY; |
1047 | 1047 | ||
1048 | if ((mode & ISOLATE_CLEAN) && (PageDirty(page) || PageWriteback(page))) | ||
1049 | return ret; | ||
1050 | |||
1048 | if (likely(get_page_unless_zero(page))) { | 1051 | if (likely(get_page_unless_zero(page))) { |
1049 | /* | 1052 | /* |
1050 | * Be careful not to clear PageLRU until after we're | 1053 | * Be careful not to clear PageLRU until after we're |