diff options
Diffstat (limited to 'mm')
-rw-r--r-- | mm/page_alloc.c | 7 |
1 files changed, 5 insertions, 2 deletions
diff --git a/mm/page_alloc.c b/mm/page_alloc.c index 6aa0a8e89c5d..94fd283dde98 100644 --- a/mm/page_alloc.c +++ b/mm/page_alloc.c | |||
@@ -729,6 +729,7 @@ static void __free_pages_ok(struct page *page, unsigned int order) | |||
729 | { | 729 | { |
730 | unsigned long flags; | 730 | unsigned long flags; |
731 | int wasMlocked = __TestClearPageMlocked(page); | 731 | int wasMlocked = __TestClearPageMlocked(page); |
732 | int migratetype; | ||
732 | 733 | ||
733 | if (!free_pages_prepare(page, order)) | 734 | if (!free_pages_prepare(page, order)) |
734 | return; | 735 | return; |
@@ -737,8 +738,9 @@ static void __free_pages_ok(struct page *page, unsigned int order) | |||
737 | if (unlikely(wasMlocked)) | 738 | if (unlikely(wasMlocked)) |
738 | free_page_mlock(page); | 739 | free_page_mlock(page); |
739 | __count_vm_events(PGFREE, 1 << order); | 740 | __count_vm_events(PGFREE, 1 << order); |
740 | free_one_page(page_zone(page), page, order, | 741 | migratetype = get_pageblock_migratetype(page); |
741 | get_pageblock_migratetype(page)); | 742 | set_freepage_migratetype(page, migratetype); |
743 | free_one_page(page_zone(page), page, order, migratetype); | ||
742 | local_irq_restore(flags); | 744 | local_irq_restore(flags); |
743 | } | 745 | } |
744 | 746 | ||
@@ -959,6 +961,7 @@ static int move_freepages(struct zone *zone, | |||
959 | order = page_order(page); | 961 | order = page_order(page); |
960 | list_move(&page->lru, | 962 | list_move(&page->lru, |
961 | &zone->free_area[order].free_list[migratetype]); | 963 | &zone->free_area[order].free_list[migratetype]); |
964 | set_freepage_migratetype(page, migratetype); | ||
962 | page += 1 << order; | 965 | page += 1 << order; |
963 | pages_moved += 1 << order; | 966 | pages_moved += 1 << order; |
964 | } | 967 | } |