diff --git a/[refs] b/[refs] index 3ee532adbfca..53cdabae0d21 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 08c097fc3bb283299a6915a6a3795edab85979b1 +refs/heads/master: e53289c0c5e5a24e29e571eba7af05c845c10890 diff --git a/trunk/mm/memory.c b/trunk/mm/memory.c index 49fb1cf08611..bb1369f7b9b4 100644 --- a/trunk/mm/memory.c +++ b/trunk/mm/memory.c @@ -3711,6 +3711,14 @@ int handle_mm_fault(struct mm_struct *mm, struct vm_area_struct *vma, if (pmd_trans_huge(orig_pmd)) { unsigned int dirty = flags & FAULT_FLAG_WRITE; + /* + * If the pmd is splitting, return and retry the + * the fault. Alternative: wait until the split + * is done, and goto retry. + */ + if (pmd_trans_splitting(orig_pmd)) + return 0; + if (pmd_numa(orig_pmd)) return do_huge_pmd_numa_page(mm, vma, address, orig_pmd, pmd);