On Mon 06-06-16 15:26:50, Michal Hocko wrote:
[...]
> @@ -922,8 +941,17 @@ void oom_kill_process(struct oom_control *oc, struct 
> task_struct *p,
>       }
>       rcu_read_unlock();
>  
> -     if (can_oom_reap)
> +     if (can_oom_reap) {
>               wake_oom_reaper(victim);
> +     } else if (victim != current) {
> +             /*
> +              * If we want to guarantee a forward progress we cannot keep
> +              * the oom victim TIF_MEMDIE here. Sleep for a while and then
> +              * drop the flag to make sure another victim can be selected.
> +              */
> +             schedule_timeout_killable(HZ);
> +             exit_oom_victim(victim);

thiking about it more, with the other change in the
oom_scan_process_thread we do not need to exit_oom_victim. In fact we
even shouldn't because of the oom_disabled synchronization. I will
respin the patch and drop the exit_oom_victim part.
schedule_timeout_killable will stay...

> +     }
>  
>       mmdrop(mm);
>       put_task_struct(victim);
> -- 
> 2.8.1
> 
> -- 
> Michal Hocko
> SUSE Labs

-- 
Michal Hocko
SUSE Labs

Reply via email to