|
@@ -640,11 +640,8 @@ static int __do_huge_pmd_anonymous_page(struct mm_struct *mm,
|
|
|
|
|
|
VM_BUG_ON(!PageCompound(page));
|
|
|
pgtable = pte_alloc_one(mm, haddr);
|
|
|
- if (unlikely(!pgtable)) {
|
|
|
- mem_cgroup_uncharge_page(page);
|
|
|
- put_page(page);
|
|
|
+ if (unlikely(!pgtable))
|
|
|
return VM_FAULT_OOM;
|
|
|
- }
|
|
|
|
|
|
clear_huge_page(page, haddr, HPAGE_PMD_NR);
|
|
|
__SetPageUptodate(page);
|
|
@@ -723,8 +720,14 @@ int do_huge_pmd_anonymous_page(struct mm_struct *mm, struct vm_area_struct *vma,
|
|
|
put_page(page);
|
|
|
goto out;
|
|
|
}
|
|
|
+ if (unlikely(__do_huge_pmd_anonymous_page(mm, vma, haddr, pmd,
|
|
|
+ page))) {
|
|
|
+ mem_cgroup_uncharge_page(page);
|
|
|
+ put_page(page);
|
|
|
+ goto out;
|
|
|
+ }
|
|
|
|
|
|
- return __do_huge_pmd_anonymous_page(mm, vma, haddr, pmd, page);
|
|
|
+ return 0;
|
|
|
}
|
|
|
out:
|
|
|
/*
|