diff options
Diffstat (limited to 'mm')
| -rw-r--r-- | mm/oom_kill.c | 17 | 
1 files changed, 7 insertions, 10 deletions
diff --git a/mm/oom_kill.c b/mm/oom_kill.c index f16ec0840a0e..e2a2c35dd493 100644 --- a/mm/oom_kill.c +++ b/mm/oom_kill.c @@ -186,7 +186,7 @@ unsigned long oom_badness(struct task_struct *p, struct mem_cgroup *memcg,  	 */  	adj = (long)p->signal->oom_score_adj;  	if (adj == OOM_SCORE_ADJ_MIN || -			test_bit(MMF_OOM_REAPED, &p->mm->flags) || +			test_bit(MMF_OOM_SKIP, &p->mm->flags) ||  			in_vfork(p)) {  		task_unlock(p);  		return 0; @@ -296,11 +296,11 @@ static int oom_evaluate_task(struct task_struct *task, void *arg)  	/*  	 * This task already has access to memory reserves and is being killed.  	 * Don't allow any other task to have access to the reserves unless -	 * the task has MMF_OOM_REAPED because chances that it would release +	 * the task has MMF_OOM_SKIP because chances that it would release  	 * any memory is quite low.  	 */ -	if (!is_sysrq_oom(oc) && atomic_read(&task->signal->oom_victims)) { -		if (test_bit(MMF_OOM_REAPED, &task->signal->oom_mm->flags)) +	if (!is_sysrq_oom(oc) && tsk_is_oom_victim(task)) { +		if (test_bit(MMF_OOM_SKIP, &task->signal->oom_mm->flags))  			goto next;  		goto abort;  	} @@ -572,7 +572,7 @@ done:  	 * Hide this mm from OOM killer because it has been either reaped or  	 * somebody can't call up_write(mmap_sem).  	 */ -	set_bit(MMF_OOM_REAPED, &mm->flags); +	set_bit(MMF_OOM_SKIP, &mm->flags);  	/* Drop a reference taken by wake_oom_reaper */  	put_task_struct(tsk); @@ -654,8 +654,6 @@ static void mark_oom_victim(struct task_struct *tsk)  	if (test_and_set_tsk_thread_flag(tsk, TIF_MEMDIE))  		return; -	atomic_inc(&tsk->signal->oom_victims); -  	/* oom_mm is bound to the signal struct life time. */  	if (!cmpxchg(&tsk->signal->oom_mm, NULL, mm))  		atomic_inc(&tsk->signal->oom_mm->mm_count); @@ -677,7 +675,6 @@ void exit_oom_victim(struct task_struct *tsk)  {  	if (!test_and_clear_tsk_thread_flag(tsk, TIF_MEMDIE))  		return; -	atomic_dec(&tsk->signal->oom_victims);  	if (!atomic_dec_return(&oom_victims))  		wake_up_all(&oom_victims_wait); @@ -769,7 +766,7 @@ static bool task_will_free_mem(struct task_struct *task)  	 * This task has already been drained by the oom reaper so there are  	 * only small chances it will free some more  	 */ -	if (test_bit(MMF_OOM_REAPED, &mm->flags)) +	if (test_bit(MMF_OOM_SKIP, &mm->flags))  		return false;  	if (atomic_read(&mm->mm_users) <= 1) @@ -906,7 +903,7 @@ static void oom_kill_process(struct oom_control *oc, const char *message)  			 * killer to guarantee OOM forward progress.  			 */  			can_oom_reap = false; -			set_bit(MMF_OOM_REAPED, &mm->flags); +			set_bit(MMF_OOM_SKIP, &mm->flags);  			pr_info("oom killer %d (%s) has mm pinned by %d (%s)\n",  					task_pid_nr(victim), victim->comm,  					task_pid_nr(p), p->comm);  | 
