diff options
Diffstat (limited to 'mm/migrate.c')
-rw-r--r-- | mm/migrate.c | 11 |
1 files changed, 11 insertions, 0 deletions
diff --git a/mm/migrate.c b/mm/migrate.c index 37143b924484..b535a2c1656c 100644 --- a/mm/migrate.c +++ b/mm/migrate.c | |||
@@ -67,6 +67,8 @@ int putback_lru_pages(struct list_head *l) | |||
67 | 67 | ||
68 | list_for_each_entry_safe(page, page2, l, lru) { | 68 | list_for_each_entry_safe(page, page2, l, lru) { |
69 | list_del(&page->lru); | 69 | list_del(&page->lru); |
70 | dec_zone_page_state(page, NR_ISOLATED_ANON + | ||
71 | !!page_is_file_cache(page)); | ||
70 | putback_lru_page(page); | 72 | putback_lru_page(page); |
71 | count++; | 73 | count++; |
72 | } | 74 | } |
@@ -698,6 +700,8 @@ unlock: | |||
698 | * restored. | 700 | * restored. |
699 | */ | 701 | */ |
700 | list_del(&page->lru); | 702 | list_del(&page->lru); |
703 | dec_zone_page_state(page, NR_ISOLATED_ANON + | ||
704 | !!page_is_file_cache(page)); | ||
701 | putback_lru_page(page); | 705 | putback_lru_page(page); |
702 | } | 706 | } |
703 | 707 | ||
@@ -742,6 +746,13 @@ int migrate_pages(struct list_head *from, | |||
742 | struct page *page2; | 746 | struct page *page2; |
743 | int swapwrite = current->flags & PF_SWAPWRITE; | 747 | int swapwrite = current->flags & PF_SWAPWRITE; |
744 | int rc; | 748 | int rc; |
749 | unsigned long flags; | ||
750 | |||
751 | local_irq_save(flags); | ||
752 | list_for_each_entry(page, from, lru) | ||
753 | __inc_zone_page_state(page, NR_ISOLATED_ANON + | ||
754 | !!page_is_file_cache(page)); | ||
755 | local_irq_restore(flags); | ||
745 | 756 | ||
746 | if (!swapwrite) | 757 | if (!swapwrite) |
747 | current->flags |= PF_SWAPWRITE; | 758 | current->flags |= PF_SWAPWRITE; |