| To: | Johannes Weiner <hannes@xxxxxxxxxxx> |
|---|---|
| Subject: | Re: How to handle TIF_MEMDIE stalls? |
| From: | Michal Hocko <mhocko@xxxxxxx> |
| Date: | Thu, 19 Feb 2015 13:58:44 +0100 |
| Cc: | Dave Chinner <david@xxxxxxxxxxxxx>, Tetsuo Handa <penguin-kernel@xxxxxxxxxxxxxxxxxxx>, dchinner@xxxxxxxxxx, linux-mm@xxxxxxxxx, rientjes@xxxxxxxxxx, oleg@xxxxxxxxxx, akpm@xxxxxxxxxxxxxxxxxxxx, mgorman@xxxxxxx, torvalds@xxxxxxxxxxxxxxxxxxxx, xfs@xxxxxxxxxxx |
| Delivered-to: | xfs@xxxxxxxxxxx |
| In-reply-to: | <20150219122914.GH28427@xxxxxxxxxxxxxx> |
| References: | <20150210151934.GA11212@xxxxxxxxxxxxxxxxxxxxxx> <201502111123.ICD65197.FMLOHSQJFVOtFO@xxxxxxxxxxxxxxxxxxx> <201502172123.JIE35470.QOLMVOFJSHOFFt@xxxxxxxxxxxxxxxxxxx> <20150217125315.GA14287@xxxxxxxxxxxxxxxxxxxxxx> <20150217225430.GJ4251@dastard> <20150218082502.GA4478@xxxxxxxxxxxxxx> <20150218104859.GM12722@dastard> <20150218121602.GC4478@xxxxxxxxxxxxxx> <20150219110124.GC15569@xxxxxxxxxxxxxxxxxxxxxx> <20150219122914.GH28427@xxxxxxxxxxxxxx> |
| User-agent: | Mutt/1.5.23 (2014-03-12) |
On Thu 19-02-15 13:29:14, Michal Hocko wrote:
[...]
> Something like the following.
__GFP_HIGH doesn't seem to be sufficient so we would need something
slightly else but the idea is still the same:
diff --git a/mm/page_alloc.c b/mm/page_alloc.c
index 8d52ab18fe0d..2d224bbdf8e8 100644
--- a/mm/page_alloc.c
+++ b/mm/page_alloc.c
@@ -2599,6 +2599,7 @@ __alloc_pages_slowpath(gfp_t gfp_mask, unsigned int order,
enum migrate_mode migration_mode = MIGRATE_ASYNC;
bool deferred_compaction = false;
int contended_compaction = COMPACT_CONTENDED_NONE;
+ int oom = 0;
/*
* In the slowpath, we sanity check order to avoid ever trying to
@@ -2635,6 +2636,15 @@ retry:
alloc_flags = gfp_to_alloc_flags(gfp_mask);
/*
+ * __GFP_NOFAIL allocations cannot fail but yet the current context
+ * might be blocking resources needed by the OOM victim to terminate.
+ * Allow the caller to dive into memory reserves to succeed the
+ * allocation and break out from a potential deadlock.
+ */
+ if (oom > 10 && (gfp_mask & __GFP_NOFAIL))
+ alloc_flags |= ALLOC_NO_WATERMARKS;
+
+ /*
* Find the true preferred zone if the allocation is unconstrained by
* cpusets.
*/
@@ -2759,6 +2769,8 @@ retry:
goto got_pg;
if (!did_some_progress)
goto nopage;
+
+ oom++;
}
/* Wait for some write requests to complete then retry */
wait_iff_congested(ac->preferred_zone, BLK_RW_ASYNC, HZ/50);
--
Michal Hocko
SUSE Labs
|
| Previous by Date: | Re: How to handle TIF_MEMDIE stalls?, Michal Hocko |
|---|---|
| Next by Date: | [PATCH RFC] fs: xfs: Fix xfs_trans_read_buf event tracing, Pratyush Anand |
| Previous by Thread: | Re: How to handle TIF_MEMDIE stalls?, Michal Hocko |
| Next by Thread: | Re: How to handle TIF_MEMDIE stalls?, Tetsuo Handa |
| Indexes: | [Date] [Thread] [Top] [All Lists] |