On Tuesday, November 08, 2016 7:32 AM Naoya Horiguchi wrote:
> 
> @@ -1013,6 +1027,9 @@ int do_huge_pmd_wp_page(struct fault_env *fe, pmd_t 
> orig_pmd)
>       if (unlikely(!pmd_same(*fe->pmd, orig_pmd)))
>               goto out_unlock;
> 
> +     if (unlikely(!pmd_present(orig_pmd)))
> +             goto out_unlock;
> +

Can we encounter a migration entry after acquiring ptl ?

>       page = pmd_page(orig_pmd);
>       VM_BUG_ON_PAGE(!PageCompound(page) || !PageHead(page), page);
>       /*
[...]
> @@ -3591,6 +3591,10 @@ static int __handle_mm_fault(struct vm_area_struct 
> *vma, unsigned long address,
>               int ret;
> 
>               barrier();
> +             if (unlikely(is_pmd_migration_entry(orig_pmd))) {
> +                     pmd_migration_entry_wait(mm, fe.pmd);
> +                     return 0;
> +             }
>               if (pmd_trans_huge(orig_pmd) || pmd_devmap(orig_pmd)) {
>                       if (pmd_protnone(orig_pmd) && vma_is_accessible(vma))
>                               return do_huge_pmd_numa_page(&fe, orig_pmd);

Reply via email to