diff options
Diffstat (limited to 'mm/migrate.c')
-rw-r--r-- | mm/migrate.c | 7 |
1 files changed, 5 insertions, 2 deletions
diff --git a/mm/migrate.c b/mm/migrate.c index 9a0897a14d37..ed97c2c14fa8 100644 --- a/mm/migrate.c +++ b/mm/migrate.c | |||
@@ -209,8 +209,11 @@ static int remove_migration_pte(struct page *page, struct vm_area_struct *vma, | |||
209 | 209 | ||
210 | VM_BUG_ON_PAGE(PageTail(page), page); | 210 | VM_BUG_ON_PAGE(PageTail(page), page); |
211 | while (page_vma_mapped_walk(&pvmw)) { | 211 | while (page_vma_mapped_walk(&pvmw)) { |
212 | new = page - pvmw.page->index + | 212 | if (PageKsm(page)) |
213 | linear_page_index(vma, pvmw.address); | 213 | new = page; |
214 | else | ||
215 | new = page - pvmw.page->index + | ||
216 | linear_page_index(vma, pvmw.address); | ||
214 | 217 | ||
215 | get_page(new); | 218 | get_page(new); |
216 | pte = pte_mkold(mk_pte(new, READ_ONCE(vma->vm_page_prot))); | 219 | pte = pte_mkold(mk_pte(new, READ_ONCE(vma->vm_page_prot))); |