On Wed, Jun 20, 2018 at 05:31:48PM +0200, Michal Hocko wrote:
> This?
>       if (order > PAGE_ALLOC_COSTLY_ORDER)
>               return OOM_SKIPPED;
> 
>       /*
>        * We are in the middle of the charge context here, so we
>        * don't want to block when potentially sitting on a callstack
>        * that holds all kinds of filesystem and mm locks.
>        *
>        * cgroup1 allows disabling the OOM killer and waiting for outside
>        * handling until the charge can succeed; remember the context and put
>        * the task to sleep at the end of the page fault when all locks are
>        * released.
>        *
>        * On the other hand, in-kernel OOM killer allows for an async victim
>        * memory reclaim (oom_reaper) and that means that we are not solely
>        * relying on the oom victim to make a forward progress and we can
>        * invoke the oom killer here.
>        *
>        * Please note that mem_cgroup_oom_synchronize might fail to find a
>        * victim and then we have rely on mem_cgroup_oom_synchronize otherwise
>        * we would fall back to the global oom killer in 
> pagefault_out_of_memory
>        */
>       if (memcg->oom_kill_disable) {
>               if (!current->memcg_may_oom)
>                       return OOM_SKIPPED;
>               css_get(&memcg->css);
>               current->memcg_in_oom = memcg;
>               current->memcg_oom_gfp_mask = mask;
>               current->memcg_oom_order = order;
> 
>               return OOM_ASYNC;
>       }
> 
>       if (mem_cgroup_out_of_memory(memcg, mask, order))
>               return OOM_SUCCESS;
> 
>       WARN(!current->memcg_may_oom,
>                       "Memory cgroup charge failed because of no reclaimable 
> memory! "
>                       "This looks like a misconfiguration or a kernel bug.");
>       return OOM_FAILED;

Yep, this looks good IMO.

Reply via email to