aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--mm/oom_kill.c40
1 files changed, 24 insertions, 16 deletions
diff --git a/mm/oom_kill.c b/mm/oom_kill.c
index ea2147dabba6..492c98624fc1 100644
--- a/mm/oom_kill.c
+++ b/mm/oom_kill.c
@@ -337,6 +337,21 @@ static void dump_tasks(const struct mem_cgroup *mem)
337 } while_each_thread(g, p); 337 } while_each_thread(g, p);
338} 338}
339 339
340static void dump_header(gfp_t gfp_mask, int order, struct mem_cgroup *mem)
341{
342 pr_warning("%s invoked oom-killer: gfp_mask=0x%x, order=%d, "
343 "oom_adj=%d\n",
344 current->comm, gfp_mask, order, current->signal->oom_adj);
345 task_lock(current);
346 cpuset_print_task_mems_allowed(current);
347 task_unlock(current);
348 dump_stack();
349 mem_cgroup_print_oom_info(mem, current);
350 show_mem();
351 if (sysctl_oom_dump_tasks)
352 dump_tasks(mem);
353}
354
340/* 355/*
341 * Send SIGKILL to the selected process irrespective of CAP_SYS_RAW_IO 356 * Send SIGKILL to the selected process irrespective of CAP_SYS_RAW_IO
342 * flag though it's unlikely that we select a process with CAP_SYS_RAW_IO 357 * flag though it's unlikely that we select a process with CAP_SYS_RAW_IO
@@ -395,20 +410,8 @@ static int oom_kill_process(struct task_struct *p, gfp_t gfp_mask, int order,
395{ 410{
396 struct task_struct *c; 411 struct task_struct *c;
397 412
398 if (printk_ratelimit()) { 413 if (printk_ratelimit())
399 printk(KERN_WARNING "%s invoked oom-killer: " 414 dump_header(gfp_mask, order, mem);
400 "gfp_mask=0x%x, order=%d, oom_adj=%d\n",
401 current->comm, gfp_mask, order,
402 current->signal->oom_adj);
403 task_lock(current);
404 cpuset_print_task_mems_allowed(current);
405 task_unlock(current);
406 dump_stack();
407 mem_cgroup_print_oom_info(mem, current);
408 show_mem();
409 if (sysctl_oom_dump_tasks)
410 dump_tasks(mem);
411 }
412 415
413 /* 416 /*
414 * If the task is already exiting, don't alarm the sysadmin or kill 417 * If the task is already exiting, don't alarm the sysadmin or kill
@@ -544,6 +547,7 @@ retry:
544 /* Found nothing?!?! Either we hang forever, or we panic. */ 547 /* Found nothing?!?! Either we hang forever, or we panic. */
545 if (!p) { 548 if (!p) {
546 read_unlock(&tasklist_lock); 549 read_unlock(&tasklist_lock);
550 dump_header(gfp_mask, order, NULL);
547 panic("Out of memory and no killable processes...\n"); 551 panic("Out of memory and no killable processes...\n");
548 } 552 }
549 553
@@ -609,8 +613,10 @@ void out_of_memory(struct zonelist *zonelist, gfp_t gfp_mask, int order)
609 /* Got some memory back in the last second. */ 613 /* Got some memory back in the last second. */
610 return; 614 return;
611 615
612 if (sysctl_panic_on_oom == 2) 616 if (sysctl_panic_on_oom == 2) {
617 dump_header(gfp_mask, order, NULL);
613 panic("out of memory. Compulsory panic_on_oom is selected.\n"); 618 panic("out of memory. Compulsory panic_on_oom is selected.\n");
619 }
614 620
615 /* 621 /*
616 * Check if there were limitations on the allocation (only relevant for 622 * Check if there were limitations on the allocation (only relevant for
@@ -626,8 +632,10 @@ void out_of_memory(struct zonelist *zonelist, gfp_t gfp_mask, int order)
626 break; 632 break;
627 633
628 case CONSTRAINT_NONE: 634 case CONSTRAINT_NONE:
629 if (sysctl_panic_on_oom) 635 if (sysctl_panic_on_oom) {
636 dump_header(gfp_mask, order, NULL);
630 panic("out of memory. panic_on_oom is selected\n"); 637 panic("out of memory. panic_on_oom is selected\n");
638 }
631 /* Fall-through */ 639 /* Fall-through */
632 case CONSTRAINT_CPUSET: 640 case CONSTRAINT_CPUSET:
633 __out_of_memory(gfp_mask, order); 641 __out_of_memory(gfp_mask, order);