diff options
-rw-r--r-- | mm/oom_kill.c | 40 |
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 | ||
340 | static 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); |