diff options
-rw-r--r-- | mm/memcontrol.c | 10 |
1 files changed, 8 insertions, 2 deletions
diff --git a/mm/memcontrol.c b/mm/memcontrol.c index 0e81eb5f0aea..fc75f34ba609 100644 --- a/mm/memcontrol.c +++ b/mm/memcontrol.c | |||
@@ -2351,13 +2351,19 @@ static int mem_cgroup_charge_common(struct page *page, struct mm_struct *mm, | |||
2351 | gfp_t gfp_mask, enum charge_type ctype) | 2351 | gfp_t gfp_mask, enum charge_type ctype) |
2352 | { | 2352 | { |
2353 | struct mem_cgroup *mem = NULL; | 2353 | struct mem_cgroup *mem = NULL; |
2354 | int page_size = PAGE_SIZE; | ||
2354 | struct page_cgroup *pc; | 2355 | struct page_cgroup *pc; |
2356 | bool oom = true; | ||
2355 | int ret; | 2357 | int ret; |
2356 | int page_size = PAGE_SIZE; | ||
2357 | 2358 | ||
2358 | if (PageTransHuge(page)) { | 2359 | if (PageTransHuge(page)) { |
2359 | page_size <<= compound_order(page); | 2360 | page_size <<= compound_order(page); |
2360 | VM_BUG_ON(!PageTransHuge(page)); | 2361 | VM_BUG_ON(!PageTransHuge(page)); |
2362 | /* | ||
2363 | * Never OOM-kill a process for a huge page. The | ||
2364 | * fault handler will fall back to regular pages. | ||
2365 | */ | ||
2366 | oom = false; | ||
2361 | } | 2367 | } |
2362 | 2368 | ||
2363 | pc = lookup_page_cgroup(page); | 2369 | pc = lookup_page_cgroup(page); |
@@ -2366,7 +2372,7 @@ static int mem_cgroup_charge_common(struct page *page, struct mm_struct *mm, | |||
2366 | return 0; | 2372 | return 0; |
2367 | prefetchw(pc); | 2373 | prefetchw(pc); |
2368 | 2374 | ||
2369 | ret = __mem_cgroup_try_charge(mm, gfp_mask, &mem, true, page_size); | 2375 | ret = __mem_cgroup_try_charge(mm, gfp_mask, &mem, oom, page_size); |
2370 | if (ret || !mem) | 2376 | if (ret || !mem) |
2371 | return ret; | 2377 | return ret; |
2372 | 2378 | ||