On Fri 14-02-14 15:34:14, Stephen Rothwell wrote:
[...]
> diff --cc mm/memcontrol.c
> index d9c6ac1532e6,de1a2aed4954..000000000000
> --- a/mm/memcontrol.c
> +++ b/mm/memcontrol.c
> @@@ -1683,25 -1683,54 +1683,25 @@@ static void move_unlock_mem_cgroup(stru
>    */
>   void mem_cgroup_print_oom_info(struct mem_cgroup *memcg, struct task_struct 
> *p)
>   {
>  -    /*
>  -     * protects memcg_name and makes sure that parallel ooms do not
>  -     * interleave
>  -     */
>  +    /* oom_info_lock ensures that parallel ooms do not interleave */
> -     static DEFINE_SPINLOCK(oom_info_lock);
> +     static DEFINE_MUTEX(oom_info_lock);
>  -    struct cgroup *task_cgrp;
>  -    struct cgroup *mem_cgrp;
>  -    static char memcg_name[PATH_MAX];
>  -    int ret;
>       struct mem_cgroup *iter;
>       unsigned int i;
>   
>       if (!p)
>               return;
>   
> -     spin_lock(&oom_info_lock);
> +     mutex_lock(&oom_info_lock);
>       rcu_read_lock();
>   
>  -    mem_cgrp = memcg->css.cgroup;
>  -    task_cgrp = task_cgroup(p, mem_cgroup_subsys_id);
>  -
>  -    ret = cgroup_path(task_cgrp, memcg_name, PATH_MAX);
>  -    if (ret < 0) {
>  -            /*
>  -             * Unfortunately, we are unable to convert to a useful name
>  -             * But we'll still print out the usage information
>  -             */
>  -            rcu_read_unlock();
>  -            goto done;
>  -    }
>  -    rcu_read_unlock();
>  -
>  -    pr_info("Task in %s killed", memcg_name);
>  +    pr_info("Task in ");
>  +    pr_cont_cgroup_path(task_cgroup(p, memory_cgrp_id));
>  +    pr_info(" killed as a result of limit of ");
>  +    pr_cont_cgroup_path(memcg->css.cgroup);
>  +    pr_info("\n");
>   
>  -    rcu_read_lock();
>  -    ret = cgroup_path(mem_cgrp, memcg_name, PATH_MAX);
>  -    if (ret < 0) {
>  -            rcu_read_unlock();
>  -            goto done;
>  -    }
>       rcu_read_unlock();
>   
>  -    /*
>  -     * Continues from above, so we don't need an KERN_ level
>  -     */
>  -    pr_cont(" as a result of limit of %s\n", memcg_name);
>  -done:
>  -
>       pr_info("memory: usage %llukB, limit %llukB, failcnt %llu\n",
>               res_counter_read_u64(&memcg->res, RES_USAGE) >> 10,
>               res_counter_read_u64(&memcg->res, RES_LIMIT) >> 10,

I do not see spin_unlock -> mutex_unlock at the very end of this function.


-- 
Michal Hocko
SUSE Labs
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

Reply via email to