Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > linux.kernel > #1673394

[PATCH 6/6] mm, migration: do not trigger OOM killer when migrating memory

From Michal Hocko <mhocko@kernel.org>
Newsgroups linux.kernel
Subject [PATCH 6/6] mm, migration: do not trigger OOM killer when migrating memory
Date 2017-06-23 11:00 +0200
Message-ID <tVsBA-8nM-29@gated-at.bofh.it> (permalink)
References <tVsBz-8nM-3@gated-at.bofh.it>
Organization linux.* mail to news gateway

Show all headers | View raw


From: Michal Hocko <mhocko@suse.com>

Page migration (for memory hotplug, soft_offline_page or mbind) needs
to allocate a new memory. This can trigger an oom killer if the target
memory is depleated. Although quite unlikely, still possible, especially
for the memory hotplug (offlining of memoery). Up to now we didn't
really have reasonable means to back off. __GFP_NORETRY can fail just
too easily and __GFP_THISNODE sticks to a single node and that is not
suitable for all callers.

But now that we have __GFP_RETRY_MAYFAIL we should use it.  It is
preferable to fail the migration than disrupt the system by killing some
processes.

Signed-off-by: Michal Hocko <mhocko@suse.com>
---
 include/linux/migrate.h | 2 +-
 mm/memory-failure.c     | 3 ++-
 mm/mempolicy.c          | 3 ++-
 3 files changed, 5 insertions(+), 3 deletions(-)

diff --git a/include/linux/migrate.h b/include/linux/migrate.h
index f80c9882403a..9f5885dae80e 100644
--- a/include/linux/migrate.h
+++ b/include/linux/migrate.h
@@ -34,7 +34,7 @@ extern char *migrate_reason_names[MR_TYPES];
 static inline struct page *new_page_nodemask(struct page *page, int preferred_nid,
 		nodemask_t *nodemask)
 {
-	gfp_t gfp_mask = GFP_USER | __GFP_MOVABLE;
+	gfp_t gfp_mask = GFP_USER | __GFP_MOVABLE | __GFP_RETRY_MAYFAIL;
 
 	if (PageHuge(page))
 		return alloc_huge_page_nodemask(page_hstate(compound_head(page)),
diff --git a/mm/memory-failure.c b/mm/memory-failure.c
index e2e0cb0e1d0f..fe0c484c6fdb 100644
--- a/mm/memory-failure.c
+++ b/mm/memory-failure.c
@@ -1492,7 +1492,8 @@ static struct page *new_page(struct page *p, unsigned long private, int **x)
 
 		return alloc_huge_page_node(hstate, nid);
 	} else {
-		return __alloc_pages_node(nid, GFP_HIGHUSER_MOVABLE, 0);
+		return __alloc_pages_node(nid,
+				GFP_HIGHUSER_MOVABLE | __GFP_RETRY_MAYFAIL, 0);
 	}
 }
 
diff --git a/mm/mempolicy.c b/mm/mempolicy.c
index 7d8e56214ac0..d911fa5cb2a7 100644
--- a/mm/mempolicy.c
+++ b/mm/mempolicy.c
@@ -1078,7 +1078,8 @@ static struct page *new_page(struct page *page, unsigned long start, int **x)
 	/*
 	 * if !vma, alloc_page_vma() will use task or system default policy
 	 */
-	return alloc_page_vma(GFP_HIGHUSER_MOVABLE, vma, address);
+	return alloc_page_vma(GFP_HIGHUSER_MOVABLE | __GFP_RETRY_MAYFAIL,
+			vma, address);
 }
 #else
 
-- 
2.11.0

Back to linux.kernel | Previous | NextPrevious in thread | Next in thread | Find similar | Unroll thread


Thread

[PATCH 0/6] mm: give __GFP_REPEAT a better semantic Michal Hocko <mhocko@kernel.org> - 2017-06-23 11:00 +0200
  [PATCH 1/6] MIPS: do not use __GFP_REPEAT for order-0 request Michal Hocko <mhocko@kernel.org> - 2017-06-23 11:00 +0200
    Re: [PATCH 1/6] MIPS: do not use __GFP_REPEAT for order-0 request Ralf Baechle <ralf@linux-mips.org> - 2017-06-23 12:30 +0200
    Re: [PATCH 1/6] MIPS: do not use __GFP_REPEAT for order-0 request Vlastimil Babka <vbabka@suse.cz> - 2017-06-26 11:40 +0200
  [PATCH 5/6] drm/i915: use __GFP_RETRY_MAYFAIL Michal Hocko <mhocko@kernel.org> - 2017-06-23 11:00 +0200
  [PATCH 6/6] mm, migration: do not trigger OOM killer when migrating memory Michal Hocko <mhocko@kernel.org> - 2017-06-23 11:00 +0200
    Re: [PATCH 6/6] mm, migration: do not trigger OOM killer when  migrating memory Andrew Morton <akpm@linux-foundation.org> - 2017-06-23 22:50 +0200
      Re: [PATCH 6/6] mm, migration: do not trigger OOM killer when  migrating memory Michal Hocko <mhocko@kernel.org> - 2017-06-26 07:30 +0200
    Re: [PATCH 6/6] mm, migration: do not trigger OOM killer when  migrating memory Vlastimil Babka <vbabka@suse.cz> - 2017-06-26 14:20 +0200
  [PATCH 4/6] mm: kvmalloc support __GFP_RETRY_MAYFAIL for all sizes Michal Hocko <mhocko@kernel.org> - 2017-06-23 11:00 +0200
    Re: [PATCH 4/6] mm: kvmalloc support __GFP_RETRY_MAYFAIL for all  sizes Vlastimil Babka <vbabka@suse.cz> - 2017-06-26 14:10 +0200
      Re: [PATCH 4/6] mm: kvmalloc support __GFP_RETRY_MAYFAIL for all  sizes Michal Hocko <mhocko@kernel.org> - 2017-06-26 14:20 +0200
  [PATCH 2/6] mm, tree wide: replace __GFP_REPEAT by __GFP_RETRY_MAYFAIL with more useful semantic Michal Hocko <mhocko@kernel.org> - 2017-06-23 11:00 +0200
    Re: [PATCH 2/6] mm, tree wide: replace __GFP_REPEAT by  __GFP_RETRY_MAYFAIL with more useful semantic Vlastimil Babka <vbabka@suse.cz> - 2017-06-26 13:50 +0200
      Re: [PATCH 2/6] mm, tree wide: replace __GFP_REPEAT by  __GFP_RETRY_MAYFAIL with more useful semantic Vlastimil Babka <vbabka@suse.cz> - 2017-06-26 14:20 +0200
        Re: [PATCH 2/6] mm, tree wide: replace __GFP_REPEAT by  __GFP_RETRY_MAYFAIL with more useful semantic Michal Hocko <mhocko@kernel.org> - 2017-06-26 14:40 +0200
          Re: [PATCH 2/6] mm, tree wide: replace __GFP_REPEAT by  __GFP_RETRY_MAYFAIL with more useful semantic Michal Hocko <mhocko@kernel.org> - 2017-06-26 14:50 +0200
      Re: [PATCH 2/6] mm, tree wide: replace __GFP_REPEAT by  __GFP_RETRY_MAYFAIL with more useful semantic Michal Hocko <mhocko@kernel.org> - 2017-06-26 14:20 +0200
    Re: [PATCH 2/6] mm, tree wide: replace __GFP_REPEAT by  __GFP_RETRY_MAYFAIL with more useful semantic Vlastimil Babka <vbabka@suse.cz> - 2017-06-26 14:00 +0200

csiph-web