mirror of
https://github.com/torvalds/linux.git
synced 2024-11-24 13:11:40 +00:00
oom: suppress extraneous stack and memory dump
Suppresses the extraneous stack and memory dump when a parallel OOM killing has been found. There's no need to fill the ring buffer with this information if its already been printed and the condition that triggered the previous OOM killer has not yet been alleviated. Cc: Andrea Arcangeli <andrea@suse.de> Acked-by: Christoph Lameter <clameter@sgi.com> Signed-off-by: David Rientjes <rientjes@google.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:
parent
fe071d7e8a
commit
7213f5066f
@ -333,12 +333,20 @@ static int oom_kill_task(struct task_struct *p)
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int oom_kill_process(struct task_struct *p, unsigned long points,
|
||||
const char *message)
|
||||
static int oom_kill_process(struct task_struct *p, gfp_t gfp_mask, int order,
|
||||
unsigned long points, const char *message)
|
||||
{
|
||||
struct task_struct *c;
|
||||
struct list_head *tsk;
|
||||
|
||||
if (printk_ratelimit()) {
|
||||
printk(KERN_WARNING "%s invoked oom-killer: "
|
||||
"gfp_mask=0x%x, order=%d, oomkilladj=%d\n",
|
||||
current->comm, gfp_mask, order, current->oomkilladj);
|
||||
dump_stack();
|
||||
show_mem();
|
||||
}
|
||||
|
||||
/*
|
||||
* If the task is already exiting, don't alarm the sysadmin or kill
|
||||
* its children or threads, just set TIF_MEMDIE so it can die quickly
|
||||
@ -447,14 +455,6 @@ void out_of_memory(struct zonelist *zonelist, gfp_t gfp_mask, int order)
|
||||
/* Got some memory back in the last second. */
|
||||
return;
|
||||
|
||||
if (printk_ratelimit()) {
|
||||
printk(KERN_WARNING "%s invoked oom-killer: "
|
||||
"gfp_mask=0x%x, order=%d, oomkilladj=%d\n",
|
||||
current->comm, gfp_mask, order, current->oomkilladj);
|
||||
dump_stack();
|
||||
show_mem();
|
||||
}
|
||||
|
||||
if (sysctl_panic_on_oom == 2)
|
||||
panic("out of memory. Compulsory panic_on_oom is selected.\n");
|
||||
|
||||
@ -468,7 +468,7 @@ void out_of_memory(struct zonelist *zonelist, gfp_t gfp_mask, int order)
|
||||
|
||||
switch (constraint) {
|
||||
case CONSTRAINT_MEMORY_POLICY:
|
||||
oom_kill_process(current, points,
|
||||
oom_kill_process(current, gfp_mask, order, points,
|
||||
"No available memory (MPOL_BIND)");
|
||||
break;
|
||||
|
||||
@ -478,7 +478,7 @@ void out_of_memory(struct zonelist *zonelist, gfp_t gfp_mask, int order)
|
||||
/* Fall-through */
|
||||
case CONSTRAINT_CPUSET:
|
||||
if (sysctl_oom_kill_allocating_task) {
|
||||
oom_kill_process(current, points,
|
||||
oom_kill_process(current, gfp_mask, order, points,
|
||||
"Out of memory (oom_kill_allocating_task)");
|
||||
break;
|
||||
}
|
||||
@ -499,7 +499,8 @@ retry:
|
||||
panic("Out of memory and no killable processes...\n");
|
||||
}
|
||||
|
||||
if (oom_kill_process(p, points, "Out of memory"))
|
||||
if (oom_kill_process(p, points, gfp_mask, order,
|
||||
"Out of memory"))
|
||||
goto retry;
|
||||
|
||||
break;
|
||||
|
Loading…
Reference in New Issue
Block a user