On 2018/06/02 20:58, yuzhoujian wrote:
> -void mem_cgroup_print_oom_info(struct mem_cgroup *memcg, struct task_struct 
> *p)
> +void mem_cgroup_print_oom_context(struct mem_cgroup *memcg, struct 
> task_struct *p,
> +                     enum oom_constraint constraint, nodemask_t *nodemask)
>  {
> -     struct mem_cgroup *iter;
> -     unsigned int i;
> +     static char origin_memcg_name[NAME_MAX], kill_memcg_name[NAME_MAX];
> +     struct cgroup *origin_cgrp, *kill_cgrp;
>  
>       rcu_read_lock();
> -
> -     if (p) {
> -             pr_info("Task in ");
> -             pr_cont_cgroup_path(task_cgroup(p, memory_cgrp_id));
> -             pr_cont(" killed as a result of limit of ");
> -     } else {
> -             pr_info("Memory limit reached of cgroup ");
> +     if (memcg) {
> +             origin_cgrp = memcg->css.cgroup;
> +             cgroup_path(origin_cgrp, origin_memcg_name, NAME_MAX);
>       }
> -
> -     pr_cont_cgroup_path(memcg->css.cgroup);
> -     pr_cont("\n");
> -
> +     kill_cgrp = task_cgroup(p, memory_cgrp_id);
> +     cgroup_path(kill_cgrp, kill_memcg_name, NAME_MAX);
> +
> +     if (p)
> +             
> pr_info("oom-kill:constraint=%s,nodemask=%*pbl,origin_memcg=%s,kill_memcg=%s,task=%s,pid=%5d,uid=%5d\n",
> +                     oom_constraint_text[constraint], 
> nodemask_pr_args(nodemask),
> +                     strlen(origin_memcg_name) ? origin_memcg_name : 
> "(null)",

Since origin_memcg_name is printed for both memcg OOM and !memcg OOM,
it is strange that origin_memcg_name is updated only when memcg != NULL.
Have you really tested !memcg OOM case?

Reply via email to