mm, THP: don't hold mmap_sem in khugepaged when allocating THP
[firefly-linux-kernel-4.4.55.git] / mm / migrate.c
index f78ec9bd454dd04585d208bd065460c92f04c042..2740360cd216ca45054387f481c7c31775d4ebff 100644 (file)
@@ -146,8 +146,11 @@ static int remove_migration_pte(struct page *new, struct vm_area_struct *vma,
        pte = pte_mkold(mk_pte(new, vma->vm_page_prot));
        if (pte_swp_soft_dirty(*ptep))
                pte = pte_mksoft_dirty(pte);
+
+       /* Recheck VMA as permissions can change since migration started  */
        if (is_write_migration_entry(entry))
-               pte = pte_mkwrite(pte);
+               pte = maybe_mkwrite(pte, vma);
+
 #ifdef CONFIG_HUGETLB_PAGE
        if (PageHuge(new)) {
                pte = pte_mkhuge(pte);