|
@@ -32,6 +32,7 @@
|
|
|
#include <linux/mempolicy.h>
|
|
|
#include <linux/security.h>
|
|
|
#include <linux/ptrace.h>
|
|
|
+#include <linux/freezer.h>
|
|
|
|
|
|
int sysctl_panic_on_oom;
|
|
|
int sysctl_oom_kill_allocating_task;
|
|
@@ -317,8 +318,11 @@ static struct task_struct *select_bad_process(unsigned int *ppoints,
|
|
|
* blocked waiting for another task which itself is waiting
|
|
|
* for memory. Is there a better alternative?
|
|
|
*/
|
|
|
- if (test_tsk_thread_flag(p, TIF_MEMDIE))
|
|
|
+ if (test_tsk_thread_flag(p, TIF_MEMDIE)) {
|
|
|
+ if (unlikely(frozen(p)))
|
|
|
+ thaw_process(p);
|
|
|
return ERR_PTR(-1UL);
|
|
|
+ }
|
|
|
if (!p->mm)
|
|
|
continue;
|
|
|
|