X-Git-Url: https://git.karo-electronics.de/?a=blobdiff_plain;f=mm%2Foom_kill.c;h=40ba05061a4fbc8a43d3eb046a58fe756748cd06;hb=7c56c29a3bee36f71c7e37de88c9261d61e97e58;hp=6b9e758c98a59ebd46168ecf150db260988fd437;hpb=a0c9f240a992c4c2b6ac40324ece27475cf3b71a;p=karo-tx-linux.git diff --git a/mm/oom_kill.c b/mm/oom_kill.c index 6b9e758c98a5..40ba05061a4f 100644 --- a/mm/oom_kill.c +++ b/mm/oom_kill.c @@ -429,7 +429,6 @@ void mem_cgroup_out_of_memory(struct mem_cgroup *mem, gfp_t gfp_mask) unsigned long points = 0; struct task_struct *p; - cgroup_lock(); read_lock(&tasklist_lock); retry: p = select_bad_process(&points, mem); @@ -444,7 +443,6 @@ retry: goto retry; out: read_unlock(&tasklist_lock); - cgroup_unlock(); } #endif @@ -560,6 +558,13 @@ void pagefault_out_of_memory(void) /* Got some memory back in the last second. */ return; + /* + * If this is from memcg, oom-killer is already invoked. + * and not worth to go system-wide-oom. + */ + if (mem_cgroup_oom_called(current)) + goto rest_and_return; + if (sysctl_panic_on_oom) panic("out of memory from page fault. panic_on_oom is selected.\n"); @@ -571,6 +576,7 @@ void pagefault_out_of_memory(void) * Give "p" a good chance of killing itself before we * retry to allocate memory. */ +rest_and_return: if (!test_thread_flag(TIF_MEMDIE)) schedule_timeout_uninterruptible(1); }