On Thu 28-05-15 06:59:32, Tetsuo Handa wrote: > Michal Hocko wrote: > > On Wed 27-05-15 06:39:42, Tetsuo Handa wrote: [...] > > > I don't think this is good, for this will omit sending SIGKILL to threads > > > sharing p->mm ("Kill all user processes sharing victim->mm in other thread > > > groups, if any.") > > > > threads? The whole thread group will die when the fatal signal is > > send to the group leader no? This mm sharing handling is about > > processes which are sharing mm but they are not in the same thread group > > OK. I should say "omit sending SIGKILL to processes which are sharing mm > but they are not in the same thread group". > > > (aka CLONE_VM without CLONE_SIGHAND resp. CLONE_THREAD). > > clone(CLONE_SIGHAND | CLONE_VM) ? no I meant clone(CLONE_VM | flags) where flags doesn't contain neither CLONE_SIGHAND nor CLONE_THREAD. [...] > I just imagined a case where p is blocked at down_read() in acct_collect() from > do_exit() when p is sharing mm with other processes, and other process is doing > blocking operation with mm->mmap_sem held for writing. Is such case impossible? It is very much possible and I have missed this case when proposing my alternative. The other process could be doing an address space operation e.g. mmap which requires an allocation. We do not handle this case properly because we are doing this before even going to select a victim. if (current->mm && (fatal_signal_pending(current) || task_will_free_mem(current))) { mark_oom_victim(current); goto out; } I have to think some more about a potential fix... -- Michal Hocko SUSE Labs -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to majordomo@xxxxxxxxx. For more info on Linux MM, see: http://www.linux-mm.org/ . Don't email: <a href=mailto:"dont@xxxxxxxxx"> email@xxxxxxxxx </a>