diff options
Diffstat (limited to 'mm/oom_kill.c')
| -rw-r--r-- | mm/oom_kill.c | 24 | 
1 files changed, 15 insertions, 9 deletions
diff --git a/mm/oom_kill.c b/mm/oom_kill.c index 92bcf1db16b..a7b2460e922 100644 --- a/mm/oom_kill.c +++ b/mm/oom_kill.c @@ -284,22 +284,28 @@ static void dump_tasks(const struct mem_cgroup *mem)  	printk(KERN_INFO "[ pid ]   uid  tgid total_vm      rss cpu oom_adj "  	       "name\n");  	do_each_thread(g, p) { -		/* -		 * total_vm and rss sizes do not exist for tasks with a -		 * detached mm so there's no need to report them. -		 */ -		if (!p->mm) -			continue; +		struct mm_struct *mm; +  		if (mem && !task_in_mem_cgroup(p, mem))  			continue;  		if (!thread_group_leader(p))  			continue;  		task_lock(p); +		mm = p->mm; +		if (!mm) { +			/* +			 * total_vm and rss sizes do not exist for tasks with no +			 * mm so there's no need to report them; they can't be +			 * oom killed anyway. +			 */ +			task_unlock(p); +			continue; +		}  		printk(KERN_INFO "[%5d] %5d %5d %8lu %8lu %3d     %3d %s\n", -		       p->pid, __task_cred(p)->uid, p->tgid, -		       p->mm->total_vm, get_mm_rss(p->mm), (int)task_cpu(p), -		       p->oomkilladj, p->comm); +		       p->pid, __task_cred(p)->uid, p->tgid, mm->total_vm, +		       get_mm_rss(mm), (int)task_cpu(p), p->oomkilladj, +		       p->comm);  		task_unlock(p);  	} while_each_thread(g, p);  }  |