On 07/03, Tetsuo Handa wrote: > > +static void oom_reap_vmas(struct mm_struct *mm) > { > int attempts = 0; > - struct mm_struct *mm = NULL; > - struct task_struct *p = find_lock_task_mm(tsk); > + bool ret; > > /* > - * Make sure we find the associated mm_struct even when the particular > - * thread has already terminated and cleared its mm. > - * We might have race with exit path so consider our work done if there > - * is no mm. > + * Check MMF_OOM_REAPED after holding oom_lock because > + * oom_kill_process() might find this mm pinned. > */ > - if (!p) > - goto done; > - mm = p->mm; > - atomic_inc(&mm->mm_count); > - task_unlock(p); > + mutex_lock(&oom_lock); > + ret = test_bit(MMF_OOM_REAPED, &mm->flags); > + mutex_unlock(&oom_lock); OK, but this looks strange... Can't we instead move mark_oom_victim(victim) to the end of oom_kill_process(), and change mark_oom_victim() to do nothing if MMF_OOM_REAPED is set? Or just check this flag in oom_kill_process() before mark_oom_victim(). Oleg. -- 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>