|
@@ -94,13 +94,16 @@ static unsigned long change_pte_range(struct vm_area_struct *vma, pmd_t *pmd,
|
|
|
swp_entry_t entry = pte_to_swp_entry(oldpte);
|
|
|
|
|
|
if (is_write_migration_entry(entry)) {
|
|
|
+ pte_t newpte;
|
|
|
/*
|
|
|
* A protection check is difficult so
|
|
|
* just be safe and disable write
|
|
|
*/
|
|
|
make_migration_entry_read(&entry);
|
|
|
- set_pte_at(mm, addr, pte,
|
|
|
- swp_entry_to_pte(entry));
|
|
|
+ newpte = swp_entry_to_pte(entry);
|
|
|
+ if (pte_swp_soft_dirty(oldpte))
|
|
|
+ newpte = pte_swp_mksoft_dirty(newpte);
|
|
|
+ set_pte_at(mm, addr, pte, newpte);
|
|
|
}
|
|
|
pages++;
|
|
|
}
|