[alternative-merged] memcg-thp-do-not-invoke-oom-killer-on-thp-charges.patch removed from -mm tree

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



The patch titled
     Subject: memcg, thp: do not invoke oom killer on thp charges
has been removed from the -mm tree.  Its filename was
     memcg-thp-do-not-invoke-oom-killer-on-thp-charges.patch

This patch was dropped because an alternative patch was merged

------------------------------------------------------
From: Michal Hocko <mhocko@xxxxxxxx>
Subject: memcg, thp: do not invoke oom killer on thp charges

David has noticed that THP memcg charge can trigger the oom killer since
2516035499b9 ("mm, thp: remove __GFP_NORETRY from khugepaged and madvised
allocations").  We have used an explicit __GFP_NORETRY previously which
ruled the OOM killer automagically.

Memcg charge path should be semantically compliant with the allocation
path and that means that if we do not trigger the OOM killer for costly
orders which should do the same in the memcg charge path as well. 
Otherwise we are forcing callers to distinguish the two and use different
gfp masks which is both non-intuitive and bug prone.  As soon as we get a
costly high order kmalloc user we even do not have any means to tell the
memcg specific gfp mask to prevent from OOM because the charging is deep
within guts of the slab allocator.

The unexpected memcg OOM on THP has already been fixed upstream by
9d3c3354bb85 ("mm, thp: do not cause memcg oom for thp") but this is
one-off fix rather than a generic solution.  Teach mem_cgroup_oom to bail
out on costly order requests to fix the THP issue as well as any other
costly OOM eligible allocations to be added in future.

Also revert 9d3c3354bb85 because special gfp for THP is no longer needed.

Link: http://lkml.kernel.org/r/20180403193129.22146-1-mhocko@xxxxxxxxxx
Fixes: 2516035499b9 ("mm, thp: remove __GFP_NORETRY from khugepaged and madvised allocations")
Signed-off-by: Michal Hocko <mhocko@xxxxxxxx>
Reported-by: David Rientjes <rientjes@xxxxxxxxxx>
Acked-by: Johannes Weiner <hannes@xxxxxxxxxxx>
Cc: "Kirill A. Shutemov" <kirill@xxxxxxxxxxxxx>
Cc: Vlastimil Babka <vbabka@xxxxxxx>
Signed-off-by: Andrew Morton <akpm@xxxxxxxxxxxxxxxxxxxx>
---

 mm/huge_memory.c |    5 ++---
 mm/khugepaged.c  |    8 ++------
 mm/memcontrol.c  |    2 +-
 3 files changed, 5 insertions(+), 10 deletions(-)

diff -puN mm/huge_memory.c~memcg-thp-do-not-invoke-oom-killer-on-thp-charges mm/huge_memory.c
--- a/mm/huge_memory.c~memcg-thp-do-not-invoke-oom-killer-on-thp-charges
+++ a/mm/huge_memory.c
@@ -555,8 +555,7 @@ static int __do_huge_pmd_anonymous_page(
 
 	VM_BUG_ON_PAGE(!PageCompound(page), page);
 
-	if (mem_cgroup_try_charge(page, vma->vm_mm, gfp | __GFP_NORETRY, &memcg,
-				  true)) {
+	if (mem_cgroup_try_charge(page, vma->vm_mm, gfp, &memcg, true)) {
 		put_page(page);
 		count_vm_event(THP_FAULT_FALLBACK);
 		return VM_FAULT_FALLBACK;
@@ -1317,7 +1316,7 @@ alloc:
 	}
 
 	if (unlikely(mem_cgroup_try_charge(new_page, vma->vm_mm,
-				huge_gfp | __GFP_NORETRY, &memcg, true))) {
+					huge_gfp, &memcg, true))) {
 		put_page(new_page);
 		split_huge_pmd(vma, vmf->pmd, vmf->address);
 		if (page)
diff -puN mm/khugepaged.c~memcg-thp-do-not-invoke-oom-killer-on-thp-charges mm/khugepaged.c
--- a/mm/khugepaged.c~memcg-thp-do-not-invoke-oom-killer-on-thp-charges
+++ a/mm/khugepaged.c
@@ -965,9 +965,7 @@ static void collapse_huge_page(struct mm
 		goto out_nolock;
 	}
 
-	/* Do not oom kill for khugepaged charges */
-	if (unlikely(mem_cgroup_try_charge(new_page, mm, gfp | __GFP_NORETRY,
-					   &memcg, true))) {
+	if (unlikely(mem_cgroup_try_charge(new_page, mm, gfp, &memcg, true))) {
 		result = SCAN_CGROUP_CHARGE_FAIL;
 		goto out_nolock;
 	}
@@ -1326,9 +1324,7 @@ static void collapse_shmem(struct mm_str
 		goto out;
 	}
 
-	/* Do not oom kill for khugepaged charges */
-	if (unlikely(mem_cgroup_try_charge(new_page, mm, gfp | __GFP_NORETRY,
-					   &memcg, true))) {
+	if (unlikely(mem_cgroup_try_charge(new_page, mm, gfp, &memcg, true))) {
 		result = SCAN_CGROUP_CHARGE_FAIL;
 		goto out;
 	}
diff -puN mm/memcontrol.c~memcg-thp-do-not-invoke-oom-killer-on-thp-charges mm/memcontrol.c
--- a/mm/memcontrol.c~memcg-thp-do-not-invoke-oom-killer-on-thp-charges
+++ a/mm/memcontrol.c
@@ -1485,7 +1485,7 @@ static void memcg_oom_recover(struct mem
 
 static void mem_cgroup_oom(struct mem_cgroup *memcg, gfp_t mask, int order)
 {
-	if (!current->memcg_may_oom)
+	if (!current->memcg_may_oom || order > PAGE_ALLOC_COSTLY_ORDER)
 		return;
 	/*
 	 * We are in the middle of the charge context here, so we
_

Patches currently in -mm which might be from mhocko@xxxxxxxx are

mm-oom-docs-describe-the-cgroup-aware-oom-killer-fix-2.patch
mm-numa-rework-do_pages_move.patch
mm-migrate-remove-reason-argument-from-new_page_t.patch
mm-unclutter-thp-migration.patch
mm-introduce-map_fixed_safe.patch
fs-elf-drop-map_fixed-usage-from-elf_map.patch
elf-enforce-map_fixed-on-overlaying-elf-segments.patch

--
To unsubscribe from this list: send the line "unsubscribe mm-commits" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html



[Index of Archives]     [Kernel Archive]     [IETF Annouce]     [DCCP]     [Netdev]     [Networking]     [Security]     [Bugtraq]     [Yosemite]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux SCSI]

  Powered by Linux