|
@@ -146,6 +146,18 @@ int freeze_processes(void)
|
|
|
if (!error && !oom_killer_disable())
|
|
|
error = -EBUSY;
|
|
|
|
|
|
+ /*
|
|
|
+ * There is a hard to fix race between oom_reaper kernel thread
|
|
|
+ * and oom_killer_disable. oom_reaper calls exit_oom_victim
|
|
|
+ * before the victim reaches exit_mm so try to freeze all the tasks
|
|
|
+ * again and catch such a left over task.
|
|
|
+ */
|
|
|
+ if (!error) {
|
|
|
+ pr_info("Double checking all user space processes after OOM killer disable... ");
|
|
|
+ error = try_to_freeze_tasks(true);
|
|
|
+ pr_cont("\n");
|
|
|
+ }
|
|
|
+
|
|
|
if (error)
|
|
|
thaw_processes();
|
|
|
return error;
|