diff options
Diffstat (limited to 'mm/memcontrol.c')
-rw-r--r-- | mm/memcontrol.c | 12 |
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 | */ |
1648 | void mem_cgroup_print_oom_info(struct mem_cgroup *memcg, struct task_struct *p) | 1648 | void 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 | /* |