From: David Rientjes <rientjes@google.com>
To: Andrew Morton <akpm@linux-foundation.org>
Cc: Andrea Arcangeli <andrea@suse.de>,
Christoph Lameter <clameter@sgi.com>,
Rik van Riel <riel@redhat.com>,
linux-mm@kvack.org
Subject: [patch 5/9] oom: serialize out of memory calls
Date: Thu, 20 Sep 2007 13:23:20 -0700 (PDT) [thread overview]
Message-ID: <alpine.DEB.0.9999.0709201321220.25753@chino.kir.corp.google.com> (raw)
In-Reply-To: <alpine.DEB.0.9999.0709201321070.25753@chino.kir.corp.google.com>
Before invoking the OOM killer, a final allocation attempt with a very
high watermark is attempted. Serialization needs to occur at this point
or it may be possible that the allocation could succeed after acquiring
the lock. If the lock is contended, the task is put to sleep and the
allocation attempt is retried when rescheduled.
Cc: Andrea Arcangeli <andrea@suse.de>
Cc: Christoph Lameter <clameter@sgi.com>
Signed-off-by: David Rientjes <rientjes@google.com>
---
mm/page_alloc.c | 14 ++++++++++++--
1 files changed, 12 insertions(+), 2 deletions(-)
diff --git a/mm/page_alloc.c b/mm/page_alloc.c
--- a/mm/page_alloc.c
+++ b/mm/page_alloc.c
@@ -1353,6 +1353,11 @@ nofail_alloc:
if (page)
goto got_pg;
} else if ((gfp_mask & __GFP_FS) && !(gfp_mask & __GFP_NORETRY)) {
+ if (!try_set_zone_oom(zonelist)) {
+ schedule_timeout_uninterruptible(1);
+ goto restart;
+ }
+
/*
* Go through the zonelist yet one more time, keep
* very high watermark here, this is only to catch
@@ -1361,14 +1366,19 @@ nofail_alloc:
*/
page = get_page_from_freelist(gfp_mask|__GFP_HARDWALL, order,
zonelist, ALLOC_WMARK_HIGH|ALLOC_CPUSET);
- if (page)
+ if (page) {
+ clear_zonelist_oom(zonelist);
goto got_pg;
+ }
/* The OOM killer will not help higher order allocs so fail */
- if (order > PAGE_ALLOC_COSTLY_ORDER)
+ if (order > PAGE_ALLOC_COSTLY_ORDER) {
+ clear_zonelist_oom(zonelist);
goto nopage;
+ }
out_of_memory(zonelist, gfp_mask, order);
+ clear_zonelist_oom(zonelist);
goto restart;
}
--
To unsubscribe, send a message with 'unsubscribe linux-mm' in
the body to majordomo@kvack.org. For more info on Linux MM,
see: http://www.linux-mm.org/ .
Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a>
next prev parent reply other threads:[~2007-09-20 20:23 UTC|newest]
Thread overview: 34+ messages / expand[flat|nested] mbox.gz Atom feed top
2007-09-20 20:23 [patch 0/9] oom killer serialization David Rientjes
2007-09-20 20:23 ` [patch 1/9] oom: move prototypes to appropriate header file David Rientjes
2007-09-20 20:23 ` [patch 2/9] oom: move constraints to enum David Rientjes
2007-09-20 20:23 ` [patch 3/9] oom: change all_unreclaimable zone member to flags David Rientjes
2007-09-20 20:23 ` [patch 4/9] oom: add per-zone locking David Rientjes
2007-09-20 20:23 ` David Rientjes [this message]
2007-09-20 20:23 ` [patch 6/9] oom: add oom_kill_asking_task sysctl David Rientjes
2007-09-20 20:23 ` [patch 7/9] oom: suppress extraneous stack and memory dump David Rientjes
2007-09-20 20:23 ` [patch 8/9] oom: compare cpuset mems_allowed instead of exclusive ancestors David Rientjes
2007-09-20 20:23 ` [patch 9/9] oom: do not take callback_mutex David Rientjes
2007-09-20 22:04 ` Christoph Lameter
2007-09-20 22:01 ` [patch 8/9] oom: compare cpuset mems_allowed instead of exclusive ancestors Christoph Lameter
2007-09-20 22:00 ` [patch 7/9] oom: suppress extraneous stack and memory dump Christoph Lameter
2007-09-20 22:03 ` [patch 6/9] oom: add oom_kill_asking_task sysctl Christoph Lameter
2007-09-20 22:07 ` David Rientjes
2007-09-20 22:09 ` Christoph Lameter
2007-09-21 9:05 ` Andrew Morton
2007-09-20 21:59 ` [patch 5/9] oom: serialize out of memory calls Christoph Lameter
2007-09-21 9:01 ` Andrew Morton
2007-09-21 20:04 ` David Rientjes
2007-09-20 21:59 ` [patch 4/9] oom: add per-zone locking Christoph Lameter
2007-09-20 22:03 ` David Rientjes
2007-09-20 22:05 ` Christoph Lameter
2007-09-20 22:12 ` David Rientjes
2007-09-20 22:26 ` Christoph Lameter
2007-09-20 22:48 ` David Rientjes
2007-09-21 8:59 ` Andrew Morton
2007-09-20 21:56 ` [patch 3/9] oom: change all_unreclaimable zone member to flags Christoph Lameter
2007-09-20 21:58 ` David Rientjes
2007-09-21 8:55 ` Andrew Morton
2007-09-21 9:12 ` [patch 0/9] oom killer serialization Andrew Morton
2007-09-21 9:21 ` David Rientjes
2007-09-21 19:13 ` David Rientjes
2007-09-21 19:15 ` Christoph Lameter
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=alpine.DEB.0.9999.0709201321220.25753@chino.kir.corp.google.com \
--to=rientjes@google.com \
--cc=akpm@linux-foundation.org \
--cc=andrea@suse.de \
--cc=clameter@sgi.com \
--cc=linux-mm@kvack.org \
--cc=riel@redhat.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox