diff options
Diffstat (limited to 'mm/oom_kill.c')
-rw-r--r-- | mm/oom_kill.c | 16 |
1 files changed, 9 insertions, 7 deletions
diff --git a/mm/oom_kill.c b/mm/oom_kill.c index 5014e50644d..fc81cb22869 100644 --- a/mm/oom_kill.c +++ b/mm/oom_kill.c | |||
@@ -372,7 +372,7 @@ static void dump_tasks(const struct mem_cgroup *mem) | |||
372 | } | 372 | } |
373 | 373 | ||
374 | pr_info("[%5d] %5d %5d %8lu %8lu %3u %3d %5d %s\n", | 374 | pr_info("[%5d] %5d %5d %8lu %8lu %3u %3d %5d %s\n", |
375 | task->pid, __task_cred(task)->uid, task->tgid, | 375 | task->pid, task_uid(task), task->tgid, |
376 | task->mm->total_vm, get_mm_rss(task->mm), | 376 | task->mm->total_vm, get_mm_rss(task->mm), |
377 | task_cpu(task), task->signal->oom_adj, | 377 | task_cpu(task), task->signal->oom_adj, |
378 | task->signal->oom_score_adj, task->comm); | 378 | task->signal->oom_score_adj, task->comm); |
@@ -401,10 +401,9 @@ static void dump_header(struct task_struct *p, gfp_t gfp_mask, int order, | |||
401 | static int oom_kill_task(struct task_struct *p, struct mem_cgroup *mem) | 401 | static int oom_kill_task(struct task_struct *p, struct mem_cgroup *mem) |
402 | { | 402 | { |
403 | p = find_lock_task_mm(p); | 403 | p = find_lock_task_mm(p); |
404 | if (!p) { | 404 | if (!p) |
405 | task_unlock(p); | ||
406 | return 1; | 405 | return 1; |
407 | } | 406 | |
408 | pr_err("Killed process %d (%s) total-vm:%lukB, anon-rss:%lukB, file-rss:%lukB\n", | 407 | pr_err("Killed process %d (%s) total-vm:%lukB, anon-rss:%lukB, file-rss:%lukB\n", |
409 | task_pid_nr(p), p->comm, K(p->mm->total_vm), | 408 | task_pid_nr(p), p->comm, K(p->mm->total_vm), |
410 | K(get_mm_counter(p->mm, MM_ANONPAGES)), | 409 | K(get_mm_counter(p->mm, MM_ANONPAGES)), |
@@ -647,6 +646,7 @@ void out_of_memory(struct zonelist *zonelist, gfp_t gfp_mask, | |||
647 | unsigned long freed = 0; | 646 | unsigned long freed = 0; |
648 | unsigned int points; | 647 | unsigned int points; |
649 | enum oom_constraint constraint = CONSTRAINT_NONE; | 648 | enum oom_constraint constraint = CONSTRAINT_NONE; |
649 | int killed = 0; | ||
650 | 650 | ||
651 | blocking_notifier_call_chain(&oom_notify_list, 0, &freed); | 651 | blocking_notifier_call_chain(&oom_notify_list, 0, &freed); |
652 | if (freed > 0) | 652 | if (freed > 0) |
@@ -684,7 +684,7 @@ void out_of_memory(struct zonelist *zonelist, gfp_t gfp_mask, | |||
684 | if (!oom_kill_process(current, gfp_mask, order, 0, totalpages, | 684 | if (!oom_kill_process(current, gfp_mask, order, 0, totalpages, |
685 | NULL, nodemask, | 685 | NULL, nodemask, |
686 | "Out of memory (oom_kill_allocating_task)")) | 686 | "Out of memory (oom_kill_allocating_task)")) |
687 | return; | 687 | goto out; |
688 | } | 688 | } |
689 | 689 | ||
690 | retry: | 690 | retry: |
@@ -692,7 +692,7 @@ retry: | |||
692 | constraint == CONSTRAINT_MEMORY_POLICY ? nodemask : | 692 | constraint == CONSTRAINT_MEMORY_POLICY ? nodemask : |
693 | NULL); | 693 | NULL); |
694 | if (PTR_ERR(p) == -1UL) | 694 | if (PTR_ERR(p) == -1UL) |
695 | return; | 695 | goto out; |
696 | 696 | ||
697 | /* Found nothing?!?! Either we hang forever, or we panic. */ | 697 | /* Found nothing?!?! Either we hang forever, or we panic. */ |
698 | if (!p) { | 698 | if (!p) { |
@@ -704,13 +704,15 @@ retry: | |||
704 | if (oom_kill_process(p, gfp_mask, order, points, totalpages, NULL, | 704 | if (oom_kill_process(p, gfp_mask, order, points, totalpages, NULL, |
705 | nodemask, "Out of memory")) | 705 | nodemask, "Out of memory")) |
706 | goto retry; | 706 | goto retry; |
707 | killed = 1; | ||
708 | out: | ||
707 | read_unlock(&tasklist_lock); | 709 | read_unlock(&tasklist_lock); |
708 | 710 | ||
709 | /* | 711 | /* |
710 | * Give "p" a good chance of killing itself before we | 712 | * Give "p" a good chance of killing itself before we |
711 | * retry to allocate memory unless "p" is current | 713 | * retry to allocate memory unless "p" is current |
712 | */ | 714 | */ |
713 | if (!test_thread_flag(TIF_MEMDIE)) | 715 | if (killed && !test_thread_flag(TIF_MEMDIE)) |
714 | schedule_timeout_uninterruptible(1); | 716 | schedule_timeout_uninterruptible(1); |
715 | } | 717 | } |
716 | 718 | ||