On Fri, Sep 11, 2015 at 06:18:03PM +0300, Vladimir Davydov wrote: ... > @@ -423,6 +449,19 @@ void mark_oom_victim(struct task_struct *tsk) > * that TIF_MEMDIE tasks should be ignored. > */ > __thaw_task(tsk); > + > + /* > + * Record the pointer to the victim in the oom context of the > + * owner memcg. It will be used in exit_oom_victim in order to > + * wake up all processes waiting for the oom victim to exit. > + */ > + memcg = try_get_mem_cgroup_from_mm(tsk->mm); > + ctx = mem_cgroup_oom_context(memcg); > + spin_lock(&oom_context_lock); > + if (!ctx->victim) > + ctx->victim = tsk; > + spin_unlock(&oom_context_lock);
We do not propagate victim up to the context that initiated oom here, neither do we in oom_unlock. That means, if a process was killed in cgroup A/B as a result of memory limit of A, oom_unlock will immediately wake all processes waiting on A although it makes no sense - they should wait for victim in B to exit. I will rework and resend soon. > + mem_cgroup_put(memcg); > } _______________________________________________ Devel mailing list [email protected] https://lists.openvz.org/mailman/listinfo/devel
