On Mon, 11 Sep 2017, Roman Gushchin wrote:

> diff --git a/mm/memcontrol.c b/mm/memcontrol.c
> index 15af3da5af02..da2b12ea4667 100644
> --- a/mm/memcontrol.c
> +++ b/mm/memcontrol.c
> @@ -2661,6 +2661,231 @@ static inline bool memcg_has_children(struct 
> mem_cgroup *memcg)
>       return ret;
>  }
>  
> +static long memcg_oom_badness(struct mem_cgroup *memcg,
> +                           const nodemask_t *nodemask,
> +                           unsigned long totalpages)
> +{
> +     long points = 0;
> +     int nid;
> +     pg_data_t *pgdat;
> +
> +     /*
> +      * We don't have necessary stats for the root memcg,
> +      * so we define it's oom_score as the maximum oom_score
> +      * of the belonging tasks.
> +      */
> +     if (memcg == root_mem_cgroup) {
> +             struct css_task_iter it;
> +             struct task_struct *task;
> +             long score, max_score = 0;
> +
> +             css_task_iter_start(&memcg->css, 0, &it);
> +             while ((task = css_task_iter_next(&it))) {
> +                     score = oom_badness(task, memcg, nodemask,
> +                                         totalpages);
> +                     if (max_score > score)

score > max_score

> +                             max_score = score;
> +             }
> +             css_task_iter_end(&it);
> +
> +             return max_score;
> +     }
> +
> +     for_each_node_state(nid, N_MEMORY) {
> +             if (nodemask && !node_isset(nid, *nodemask))
> +                     continue;
> +
> +             points += mem_cgroup_node_nr_lru_pages(memcg, nid,
> +                             LRU_ALL_ANON | BIT(LRU_UNEVICTABLE));
> +
> +             pgdat = NODE_DATA(nid);
> +             points += lruvec_page_state(mem_cgroup_lruvec(pgdat, memcg),
> +                                         NR_SLAB_UNRECLAIMABLE);
> +     }
> +
> +     points += memcg_page_state(memcg, MEMCG_KERNEL_STACK_KB) /
> +             (PAGE_SIZE / 1024);
> +     points += memcg_page_state(memcg, MEMCG_SOCK);
> +     points += memcg_page_state(memcg, MEMCG_SWAP);
> +
> +     return points;
> +}
--
To unsubscribe from this list: send the line "unsubscribe linux-doc" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to