Re: [patch 05/12] mm: oom_kill: generalize OOM progress waitqueue

Michal Hocko
2015-03-26T13:03:53Z

On Wed 25-03-15 02:17:09, Johannes Weiner wrote:
> It turns out that the mechanism to wait for exiting OOM victims is
> less generic than it looks: it won't issue wakeups unless the OOM
> killer is disabled.
>
> The reason this check was added was the thought that, since only the
> OOM disabling code would wait on this queue, wakeup operations could
> be saved when that specific consumer is known to be absent.
>
> However, this is quite the handgrenade. Later attempts to reuse the
> waitqueue for other purposes will lead to completely unexpected bugs
> and the failure mode will appear seemingly illogical. Generally,
> providers shouldn't make unnecessary assumptions about consumers.
>
> This could have been replaced with waitqueue_active(), but it only
> saves a few instructions in one of the coldest paths in the kernel.
> Simply remove it.
>
> Signed-off-by: Johannes Weiner <hannes@cmpxchg.org>

Acked-by: Michal Hocko <mhocko@suse.cz>

> ---
> mm/oom_kill.c | 6 +-----
> 1 file changed, 1 insertion(+), 5 deletions(-)
>
> diff --git a/mm/oom_kill.c b/mm/oom_kill.c
> index 88aa9ba40fa5..d3490b019d46 100644
> --- a/mm/oom_kill.c
> +++ b/mm/oom_kill.c
> @@ -437,11 +437,7 @@ void exit_oom_victim(void)
> {
> clear_thread_flag(TIF_MEMDIE);
>
> - /*
> - * There is no need to signal the lasst oom_victim if there
> - * is nobody who cares.
> - */
> - if (!atomic_dec_return(&oom_victims) && oom_killer_disabled)
> + if (!atomic_dec_return(&oom_victims))
> wake_up_all(&oom_victims_wait);
> }
>
> --
> 2.3.3
>

--
Michal Hocko
SUSE Labs