diff --git a/[refs] b/[refs] index f407396d4f2f..c54a10576898 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 4829b906cc063cb7cd1b7f34fa05de6db75ec8bb +refs/heads/master: 4e31635c367a9e21a43cfbfae4c9deda2e19d1f4 diff --git a/trunk/mm/ksm.c b/trunk/mm/ksm.c index b1873cf03ed9..65ab5c7067d9 100644 --- a/trunk/mm/ksm.c +++ b/trunk/mm/ksm.c @@ -712,7 +712,7 @@ static int write_protect_page(struct vm_area_struct *vma, struct page *page, if (!ptep) goto out; - if (pte_write(*ptep)) { + if (pte_write(*ptep) || pte_dirty(*ptep)) { pte_t entry; swapped = PageSwapCache(page); @@ -735,7 +735,9 @@ static int write_protect_page(struct vm_area_struct *vma, struct page *page, set_pte_at(mm, addr, ptep, entry); goto out_unlock; } - entry = pte_wrprotect(entry); + if (pte_dirty(entry)) + set_page_dirty(page); + entry = pte_mkclean(pte_wrprotect(entry)); set_pte_at_notify(mm, addr, ptep, entry); } *orig_pte = *ptep;