huge_memory.c (6b16f5d12202a23d875915349cc031c07fe1b3ec) huge_memory.c (2cf855837b89d92996cf264713f3bed2bf9b0b4f)
1/*
2 * Copyright (C) 2009 Red Hat, Inc.
3 *
4 * This work is licensed under the terms of the GNU GPL, version 2. See
5 * the COPYING file in the top-level directory.
6 */
7
8#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt

--- 538 unchanged lines hidden (view full) ---

547 struct vm_area_struct *vma = vmf->vma;
548 struct mem_cgroup *memcg;
549 pgtable_t pgtable;
550 unsigned long haddr = vmf->address & HPAGE_PMD_MASK;
551 int ret = 0;
552
553 VM_BUG_ON_PAGE(!PageCompound(page), page);
554
1/*
2 * Copyright (C) 2009 Red Hat, Inc.
3 *
4 * This work is licensed under the terms of the GNU GPL, version 2. See
5 * the COPYING file in the top-level directory.
6 */
7
8#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt

--- 538 unchanged lines hidden (view full) ---

547 struct vm_area_struct *vma = vmf->vma;
548 struct mem_cgroup *memcg;
549 pgtable_t pgtable;
550 unsigned long haddr = vmf->address & HPAGE_PMD_MASK;
551 int ret = 0;
552
553 VM_BUG_ON_PAGE(!PageCompound(page), page);
554
555 if (mem_cgroup_try_charge(page, vma->vm_mm, gfp, &memcg, true)) {
555 if (mem_cgroup_try_charge_delay(page, vma->vm_mm, gfp, &memcg, true)) {
556 put_page(page);
557 count_vm_event(THP_FAULT_FALLBACK);
558 return VM_FAULT_FALLBACK;
559 }
560
561 pgtable = pte_alloc_one(vma->vm_mm, haddr);
562 if (unlikely(!pgtable)) {
563 ret = VM_FAULT_OOM;

--- 573 unchanged lines hidden (view full) ---

1137 ret |= VM_FAULT_OOM;
1138 goto out;
1139 }
1140
1141 for (i = 0; i < HPAGE_PMD_NR; i++) {
1142 pages[i] = alloc_page_vma_node(GFP_HIGHUSER_MOVABLE, vma,
1143 vmf->address, page_to_nid(page));
1144 if (unlikely(!pages[i] ||
556 put_page(page);
557 count_vm_event(THP_FAULT_FALLBACK);
558 return VM_FAULT_FALLBACK;
559 }
560
561 pgtable = pte_alloc_one(vma->vm_mm, haddr);
562 if (unlikely(!pgtable)) {
563 ret = VM_FAULT_OOM;

--- 573 unchanged lines hidden (view full) ---

1137 ret |= VM_FAULT_OOM;
1138 goto out;
1139 }
1140
1141 for (i = 0; i < HPAGE_PMD_NR; i++) {
1142 pages[i] = alloc_page_vma_node(GFP_HIGHUSER_MOVABLE, vma,
1143 vmf->address, page_to_nid(page));
1144 if (unlikely(!pages[i] ||
1145 mem_cgroup_try_charge(pages[i], vma->vm_mm,
1145 mem_cgroup_try_charge_delay(pages[i], vma->vm_mm,
1146 GFP_KERNEL, &memcg, false))) {
1147 if (pages[i])
1148 put_page(pages[i]);
1149 while (--i >= 0) {
1150 memcg = (void *)page_private(pages[i]);
1151 set_page_private(pages[i], 0);
1152 mem_cgroup_cancel_charge(pages[i], memcg,
1153 false);

--- 153 unchanged lines hidden (view full) ---

1307 ret |= VM_FAULT_FALLBACK;
1308 }
1309 put_page(page);
1310 }
1311 count_vm_event(THP_FAULT_FALLBACK);
1312 goto out;
1313 }
1314
1146 GFP_KERNEL, &memcg, false))) {
1147 if (pages[i])
1148 put_page(pages[i]);
1149 while (--i >= 0) {
1150 memcg = (void *)page_private(pages[i]);
1151 set_page_private(pages[i], 0);
1152 mem_cgroup_cancel_charge(pages[i], memcg,
1153 false);

--- 153 unchanged lines hidden (view full) ---

1307 ret |= VM_FAULT_FALLBACK;
1308 }
1309 put_page(page);
1310 }
1311 count_vm_event(THP_FAULT_FALLBACK);
1312 goto out;
1313 }
1314
1315 if (unlikely(mem_cgroup_try_charge(new_page, vma->vm_mm,
1315 if (unlikely(mem_cgroup_try_charge_delay(new_page, vma->vm_mm,
1316 huge_gfp, &memcg, true))) {
1317 put_page(new_page);
1318 split_huge_pmd(vma, vmf->pmd, vmf->address);
1319 if (page)
1320 put_page(page);
1321 ret |= VM_FAULT_FALLBACK;
1322 count_vm_event(THP_FAULT_FALLBACK);
1323 goto out;

--- 1611 unchanged lines hidden ---
1316 huge_gfp, &memcg, true))) {
1317 put_page(new_page);
1318 split_huge_pmd(vma, vmf->pmd, vmf->address);
1319 if (page)
1320 put_page(page);
1321 ret |= VM_FAULT_FALLBACK;
1322 count_vm_event(THP_FAULT_FALLBACK);
1323 goto out;

--- 1611 unchanged lines hidden ---