On Sat, 12 Mar 2011, Oleg Nesterov wrote: > --- 38/mm/oom_kill.c~oom_kill_spread_memdie 2011-03-12 14:19:36.000000000 +0100 > +++ 38/mm/oom_kill.c 2011-03-12 14:20:42.000000000 +0100 > @@ -401,6 +401,18 @@ static void dump_header(struct task_stru > dump_tasks(mem, nodemask); > } > > +static void do_oom_kill(struct task_struct *p) > +{ > + struct task_struct *t; > + > + t = p; > + do { > + set_tsk_thread_flag(t, TIF_MEMDIE); > + } while_each_thread(p, t); > + > + force_sig(SIGKILL, p); > +} > + > #define K(x) ((x) << (PAGE_SHIFT-10)) > static int oom_kill_task(struct task_struct *p, struct mem_cgroup *mem) > { > @@ -436,12 +448,10 @@ static int oom_kill_task(struct task_str > pr_err("Kill process %d (%s) sharing same memory\n", > task_pid_nr(q), q->comm); > task_unlock(q); > - force_sig(SIGKILL, q); > + do_oom_kill(q); > } > > - set_tsk_thread_flag(p, TIF_MEMDIE); > - force_sig(SIGKILL, p); > - > + do_oom_kill(p); > /* > * We give our sacrificial lamb high priority and access to > * all the memory it needs. That way it should be able to As mentioned in the first posting of this patch, this isn't appropraite: we don't want to set TIF_MEMDIE to all threads unless they can't reclaim memory in the page allocator and are still in an oom condition. The point is to try to limit TIF_MEMDIE to only those threads that are guaranteed to already be in the exit path or handling SIGKILLs, otherwise we risk depleting memory reserves entirely and there's no sanity checking here that would suggest that can't happen. -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to majordomo@xxxxxxxxxx For more info on Linux MM, see: http://www.linux-mm.org/ . Fight unfair telecom internet charges in Canada: sign http://stopthemeter.ca/ Don't email: <a href=mailto:"dont@xxxxxxxxx"> email@xxxxxxxxx </a>