diff options
Diffstat (limited to 'mm/migrate.c')
-rw-r--r-- | mm/migrate.c | 8 |
1 files changed, 6 insertions, 2 deletions
diff --git a/mm/migrate.c b/mm/migrate.c index ee401e4e5ef1..eb4267107d1f 100644 --- a/mm/migrate.c +++ b/mm/migrate.c | |||
@@ -880,7 +880,8 @@ static int __unmap_and_move(struct page *page, struct page *newpage, | |||
880 | /* Establish migration ptes or remove ptes */ | 880 | /* Establish migration ptes or remove ptes */ |
881 | if (page_mapped(page)) { | 881 | if (page_mapped(page)) { |
882 | try_to_unmap(page, | 882 | try_to_unmap(page, |
883 | TTU_MIGRATION|TTU_IGNORE_MLOCK|TTU_IGNORE_ACCESS); | 883 | TTU_MIGRATION|TTU_IGNORE_MLOCK|TTU_IGNORE_ACCESS| |
884 | TTU_IGNORE_HWPOISON); | ||
884 | page_was_mapped = 1; | 885 | page_was_mapped = 1; |
885 | } | 886 | } |
886 | 887 | ||
@@ -950,7 +951,10 @@ out: | |||
950 | list_del(&page->lru); | 951 | list_del(&page->lru); |
951 | dec_zone_page_state(page, NR_ISOLATED_ANON + | 952 | dec_zone_page_state(page, NR_ISOLATED_ANON + |
952 | page_is_file_cache(page)); | 953 | page_is_file_cache(page)); |
953 | if (reason != MR_MEMORY_FAILURE) | 954 | /* Soft-offlined page shouldn't go through lru cache list */ |
955 | if (reason == MR_MEMORY_FAILURE) | ||
956 | put_page(page); | ||
957 | else | ||
954 | putback_lru_page(page); | 958 | putback_lru_page(page); |
955 | } | 959 | } |
956 | 960 | ||