]> git.kernelconcepts.de Git - karo-tx-linux.git/blobdiff - mm/oom_kill.c
mm,oom: make oom_killer_disable() killable
[karo-tx-linux.git] / mm / oom_kill.c
index dc490c06941b2a6be5170c0d9ca73418b7fe8619..06f7e1707847fe11250bdb05d1ed3390cb96e5bb 100644 (file)
@@ -287,9 +287,6 @@ enum oom_scan_t oom_scan_process_thread(struct oom_control *oc,
        if (oom_task_origin(task))
                return OOM_SCAN_SELECT;
 
-       if (task_will_free_mem(task) && !is_sysrq_oom(oc))
-               return OOM_SCAN_ABORT;
-
        return OOM_SCAN_OK;
 }
 
@@ -386,10 +383,10 @@ static void dump_tasks(struct mem_cgroup *memcg, const nodemask_t *nodemask)
 static void dump_header(struct oom_control *oc, struct task_struct *p,
                        struct mem_cgroup *memcg)
 {
-       pr_warning("%s invoked oom-killer: gfp_mask=0x%x, order=%d, "
-               "oom_score_adj=%hd\n",
-               current->comm, oc->gfp_mask, oc->order,
+       pr_warn("%s invoked oom-killer: gfp_mask=%#x(%pGg), order=%d, oom_score_adj=%hd\n",
+               current->comm, oc->gfp_mask, &oc->gfp_mask, oc->order,
                current->signal->oom_score_adj);
+
        cpuset_print_current_mems_allowed();
        dump_stack();
        if (memcg)
@@ -458,15 +455,11 @@ void exit_oom_victim(void)
 bool oom_killer_disable(void)
 {
        /*
-        * Make sure to not race with an ongoing OOM killer
-        * and that the current is not the victim.
+        * Make sure to not race with an ongoing OOM killer. Check that the
+        * current is not killed (possibly due to sharing the victim's memory).
         */
-       mutex_lock(&oom_lock);
-       if (test_thread_flag(TIF_MEMDIE)) {
-               mutex_unlock(&oom_lock);
+       if (mutex_lock_killable(&oom_lock))
                return false;
-       }
-
        oom_killer_disabled = true;
        mutex_unlock(&oom_lock);