extern void oom_zonelist_unlock(struct zonelist *zonelist, gfp_t gfp_flags);
 
 extern void check_panic_on_oom(enum oom_constraint constraint, gfp_t gfp_mask,
-                              int order, const nodemask_t *nodemask);
+                              int order, const nodemask_t *nodemask,
+                              struct mem_cgroup *memcg);
 
 extern enum oom_scan_t oom_scan_process_thread(struct task_struct *task,
                unsigned long totalpages, const nodemask_t *nodemask,
 
        struct mem_cgroup *iter;
        unsigned int i;
 
-       if (!p)
-               return;
-
        mutex_lock(&oom_info_lock);
        rcu_read_lock();
 
-       pr_info("Task in ");
-       pr_cont_cgroup_path(task_cgroup(p, memory_cgrp_id));
-       pr_cont(" killed as a result of limit of ");
+       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 ");
+       }
+
        pr_cont_cgroup_path(memcg->css.cgroup);
        pr_cont("\n");
 
                return;
        }
 
-       check_panic_on_oom(CONSTRAINT_MEMCG, gfp_mask, order, NULL);
+       check_panic_on_oom(CONSTRAINT_MEMCG, gfp_mask, order, NULL, memcg);
        totalpages = mem_cgroup_get_limit(memcg) ? : 1;
        for_each_mem_cgroup_tree(iter, memcg) {
                struct css_task_iter it;
 
  * Determines whether the kernel must panic because of the panic_on_oom sysctl.
  */
 void check_panic_on_oom(enum oom_constraint constraint, gfp_t gfp_mask,
-                       int order, const nodemask_t *nodemask)
+                       int order, const nodemask_t *nodemask,
+                       struct mem_cgroup *memcg)
 {
        if (likely(!sysctl_panic_on_oom))
                return;
                if (constraint != CONSTRAINT_NONE)
                        return;
        }
-       dump_header(NULL, gfp_mask, order, NULL, nodemask);
+       dump_header(NULL, gfp_mask, order, memcg, nodemask);
        panic("Out of memory: %s panic_on_oom is enabled\n",
                sysctl_panic_on_oom == 2 ? "compulsory" : "system-wide");
 }
        constraint = constrained_alloc(zonelist, gfp_mask, nodemask,
                                                &totalpages);
        mpol_mask = (constraint == CONSTRAINT_MEMORY_POLICY) ? nodemask : NULL;
-       check_panic_on_oom(constraint, gfp_mask, order, mpol_mask);
+       check_panic_on_oom(constraint, gfp_mask, order, mpol_mask, NULL);
 
        if (sysctl_oom_kill_allocating_task && current->mm &&
            !oom_unkillable_task(current, NULL, nodemask) &&