On Mon 25-05-15 19:06:01, Oleg Nesterov wrote: > On 05/25, Michal Hocko wrote: > > > > On Fri 22-05-15 20:30:42, Oleg Nesterov wrote: > > > On 05/22, Michal Hocko wrote: > > > > > > > > On Fri 22-05-15 18:29:00, Oleg Nesterov wrote: > > > > > > > > > > In the likely case (if CLONE_VM without CLONE_THREAD was not used) the > > > > > last for_each_process() in mm_update_next_owner() will find another thread > > > > > from the same group. > > > > > > > > My understanding was that for_each_process will iterate only over > > > > processes (represented by the thread group leaders). > > > > > > Yes. But note the inner for_each_thread() loop. And note that we > > > we need this loop exactly because the leader can be zombie. > > > > I was too vague, sorry about that. > > Looks like, we confused each other somehow ;) Not sure I understand your > concerns... > > But, > > > What I meant was that > > for_each_process would pick up a group leader > > Yes. In the case above it will find the caller (current) too, > > > and the inner > > for_each_thread will return it as the first element in the list. > > Yes, and this will be "current" task. But current->mm == NULL, so > for_each_thread() will continue and find another thread which becomes > the new mm->owner. OK, this is the part I was missing. exit_mm manages to set mm to NULL before calling mm_update_next_owner. Now it makes much moer sense. Thanks for your patience! It really seems like we are broken here. The most reasonable way forward is to get rid of the owner. The patch will go to the list today. > Just in case, note the BUG_ON(c == p). I think that BUG_ON(p->mm) at > the start will look much better. This is what mm_update_next_owner() > actually assumes. > > Oleg. Thanks! -- 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>