[PATCH] oom: handle oom_disable exiting
Having the oomkilladj == OOM_DISABLE check before the releasing check means that oomkilladj == OOM_DISABLE tasks exiting will not stop the OOM killer. Moving the test down will give the desired behaviour. Also: it will allow them to "OOM-kill" themselves if they are exiting. As per the previous patch, this is required to prevent OOM killer deadlocks (and they don't actually get killed, because they're already exiting -- they're simply allowed access to memory reserves). Signed-off-by: Nick Piggin <npiggin@suse.de> Signed-off-by: Andrew Morton <akpm@osdl.org> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
This commit is contained in:
parent
50ec3bbffb
commit
4a3ede107e
1 changed files with 2 additions and 2 deletions
|
@ -204,8 +204,6 @@ static struct task_struct *select_bad_process(unsigned long *ppoints)
|
|||
/* skip the init task with pid == 1 */
|
||||
if (p->pid == 1)
|
||||
continue;
|
||||
if (p->oomkilladj == OOM_DISABLE)
|
||||
continue;
|
||||
|
||||
/*
|
||||
* This is in the process of releasing memory so wait for it
|
||||
|
@ -230,6 +228,8 @@ static struct task_struct *select_bad_process(unsigned long *ppoints)
|
|||
}
|
||||
return ERR_PTR(-1UL);
|
||||
}
|
||||
if (p->oomkilladj == OOM_DISABLE)
|
||||
continue;
|
||||
if (p->flags & PF_SWAPOFF)
|
||||
return p;
|
||||
|
||||
|
|
Loading…
Reference in a new issue