aboutsummaryrefslogtreecommitdiffstats
path: root/mm/memcontrol.c
diff options
context:
space:
mode:
Diffstat (limited to 'mm/memcontrol.c')
-rw-r--r--mm/memcontrol.c12
1 files changed, 7 insertions, 5 deletions
diff --git a/mm/memcontrol.c b/mm/memcontrol.c
index 08541f680d90..57b16083f046 100644
--- a/mm/memcontrol.c
+++ b/mm/memcontrol.c
@@ -1647,13 +1647,13 @@ static void move_unlock_mem_cgroup(struct mem_cgroup *memcg,
1647 */ 1647 */
1648void mem_cgroup_print_oom_info(struct mem_cgroup *memcg, struct task_struct *p) 1648void mem_cgroup_print_oom_info(struct mem_cgroup *memcg, struct task_struct *p)
1649{ 1649{
1650 struct cgroup *task_cgrp;
1651 struct cgroup *mem_cgrp;
1652 /* 1650 /*
1653 * Need a buffer in BSS, can't rely on allocations. The code relies 1651 * protects memcg_name and makes sure that parallel ooms do not
1654 * on the assumption that OOM is serialized for memory controller. 1652 * interleave
1655 * If this assumption is broken, revisit this code.
1656 */ 1653 */
1654 static DEFINE_SPINLOCK(oom_info_lock);
1655 struct cgroup *task_cgrp;
1656 struct cgroup *mem_cgrp;
1657 static char memcg_name[PATH_MAX]; 1657 static char memcg_name[PATH_MAX];
1658 int ret; 1658 int ret;
1659 struct mem_cgroup *iter; 1659 struct mem_cgroup *iter;
@@ -1662,6 +1662,7 @@ void mem_cgroup_print_oom_info(struct mem_cgroup *memcg, struct task_struct *p)
1662 if (!p) 1662 if (!p)
1663 return; 1663 return;
1664 1664
1665 spin_lock(&oom_info_lock);
1665 rcu_read_lock(); 1666 rcu_read_lock();
1666 1667
1667 mem_cgrp = memcg->css.cgroup; 1668 mem_cgrp = memcg->css.cgroup;
@@ -1730,6 +1731,7 @@ done:
1730 1731
1731 pr_cont("\n"); 1732 pr_cont("\n");
1732 } 1733 }
1734 spin_unlock(&oom_info_lock);
1733} 1735}
1734 1736
1735/* 1737/*