X-Git-Url: http://pileus.org/git/?a=blobdiff_plain;ds=sidebyside;f=mm%2Fhuge_memory.c;h=4df39b1bde91ff9c9300db00f9df485733c064db;hb=d82f94013a9897e02a93400e4c16efe82b530eaa;hp=da23eb96779f2bfb4e893eece4774f14499ebaaa;hpb=54dfffde22ee5ac5a6f912eb451b52683ef3ea7f;p=~andy%2Flinux diff --git a/mm/huge_memory.c b/mm/huge_memory.c index da23eb96779..4df39b1bde9 100644 --- a/mm/huge_memory.c +++ b/mm/huge_memory.c @@ -1166,8 +1166,10 @@ alloc: } else { ret = do_huge_pmd_wp_page_fallback(mm, vma, address, pmd, orig_pmd, page, haddr); - if (ret & VM_FAULT_OOM) + if (ret & VM_FAULT_OOM) { split_huge_page(page); + ret |= VM_FAULT_FALLBACK; + } put_page(page); } count_vm_event(THP_FAULT_FALLBACK); @@ -1179,9 +1181,10 @@ alloc: if (page) { split_huge_page(page); put_page(page); - } + } else + split_huge_page_pmd(vma, address, pmd); + ret |= VM_FAULT_FALLBACK; count_vm_event(THP_FAULT_FALLBACK); - ret |= VM_FAULT_OOM; goto out; }