diff options
Diffstat (limited to 'mm/page_alloc.c')
| -rw-r--r-- | mm/page_alloc.c | 6 |
1 files changed, 4 insertions, 2 deletions
diff --git a/mm/page_alloc.c b/mm/page_alloc.c index 6de9440e3ae2..97170131f2ab 100644 --- a/mm/page_alloc.c +++ b/mm/page_alloc.c | |||
| @@ -2133,7 +2133,8 @@ __rmqueue_fallback(struct zone *zone, unsigned int order, int start_migratetype) | |||
| 2133 | 2133 | ||
| 2134 | page = list_first_entry(&area->free_list[fallback_mt], | 2134 | page = list_first_entry(&area->free_list[fallback_mt], |
| 2135 | struct page, lru); | 2135 | struct page, lru); |
| 2136 | if (can_steal) | 2136 | if (can_steal && |
| 2137 | get_pageblock_migratetype(page) != MIGRATE_HIGHATOMIC) | ||
| 2137 | steal_suitable_fallback(zone, page, start_migratetype); | 2138 | steal_suitable_fallback(zone, page, start_migratetype); |
| 2138 | 2139 | ||
| 2139 | /* Remove the page from the freelists */ | 2140 | /* Remove the page from the freelists */ |
| @@ -2534,7 +2535,8 @@ int __isolate_free_page(struct page *page, unsigned int order) | |||
| 2534 | struct page *endpage = page + (1 << order) - 1; | 2535 | struct page *endpage = page + (1 << order) - 1; |
| 2535 | for (; page < endpage; page += pageblock_nr_pages) { | 2536 | for (; page < endpage; page += pageblock_nr_pages) { |
| 2536 | int mt = get_pageblock_migratetype(page); | 2537 | int mt = get_pageblock_migratetype(page); |
| 2537 | if (!is_migrate_isolate(mt) && !is_migrate_cma(mt)) | 2538 | if (!is_migrate_isolate(mt) && !is_migrate_cma(mt) |
| 2539 | && mt != MIGRATE_HIGHATOMIC) | ||
| 2538 | set_pageblock_migratetype(page, | 2540 | set_pageblock_migratetype(page, |
| 2539 | MIGRATE_MOVABLE); | 2541 | MIGRATE_MOVABLE); |
| 2540 | } | 2542 | } |
