diff options
Diffstat (limited to 'mm')
| -rw-r--r-- | mm/memcontrol.c | 19 |
1 files changed, 3 insertions, 16 deletions
diff --git a/mm/memcontrol.c b/mm/memcontrol.c index af4b04f4d744..bb894b071f59 100644 --- a/mm/memcontrol.c +++ b/mm/memcontrol.c | |||
| @@ -6052,7 +6052,7 @@ struct mem_cgroup *parent_mem_cgroup(struct mem_cgroup *memcg) | |||
| 6052 | } | 6052 | } |
| 6053 | EXPORT_SYMBOL(parent_mem_cgroup); | 6053 | EXPORT_SYMBOL(parent_mem_cgroup); |
| 6054 | 6054 | ||
| 6055 | static int mem_cgroup_soft_limit_tree_init(void) | 6055 | static void __init mem_cgroup_soft_limit_tree_init(void) |
| 6056 | { | 6056 | { |
| 6057 | struct mem_cgroup_tree_per_node *rtpn; | 6057 | struct mem_cgroup_tree_per_node *rtpn; |
| 6058 | struct mem_cgroup_tree_per_zone *rtpz; | 6058 | struct mem_cgroup_tree_per_zone *rtpz; |
| @@ -6063,8 +6063,7 @@ static int mem_cgroup_soft_limit_tree_init(void) | |||
| 6063 | if (!node_state(node, N_NORMAL_MEMORY)) | 6063 | if (!node_state(node, N_NORMAL_MEMORY)) |
| 6064 | tmp = -1; | 6064 | tmp = -1; |
| 6065 | rtpn = kzalloc_node(sizeof(*rtpn), GFP_KERNEL, tmp); | 6065 | rtpn = kzalloc_node(sizeof(*rtpn), GFP_KERNEL, tmp); |
| 6066 | if (!rtpn) | 6066 | BUG_ON(!rtpn); |
| 6067 | goto err_cleanup; | ||
| 6068 | 6067 | ||
| 6069 | soft_limit_tree.rb_tree_per_node[node] = rtpn; | 6068 | soft_limit_tree.rb_tree_per_node[node] = rtpn; |
| 6070 | 6069 | ||
| @@ -6074,17 +6073,6 @@ static int mem_cgroup_soft_limit_tree_init(void) | |||
| 6074 | spin_lock_init(&rtpz->lock); | 6073 | spin_lock_init(&rtpz->lock); |
| 6075 | } | 6074 | } |
| 6076 | } | 6075 | } |
| 6077 | return 0; | ||
| 6078 | |||
| 6079 | err_cleanup: | ||
| 6080 | for_each_node(node) { | ||
| 6081 | if (!soft_limit_tree.rb_tree_per_node[node]) | ||
| 6082 | break; | ||
| 6083 | kfree(soft_limit_tree.rb_tree_per_node[node]); | ||
| 6084 | soft_limit_tree.rb_tree_per_node[node] = NULL; | ||
| 6085 | } | ||
| 6086 | return 1; | ||
| 6087 | |||
| 6088 | } | 6076 | } |
| 6089 | 6077 | ||
| 6090 | static struct cgroup_subsys_state * __ref | 6078 | static struct cgroup_subsys_state * __ref |
| @@ -6106,8 +6094,6 @@ mem_cgroup_css_alloc(struct cgroup *cont) | |||
| 6106 | if (cont->parent == NULL) { | 6094 | if (cont->parent == NULL) { |
| 6107 | int cpu; | 6095 | int cpu; |
| 6108 | 6096 | ||
| 6109 | if (mem_cgroup_soft_limit_tree_init()) | ||
| 6110 | goto free_out; | ||
| 6111 | root_mem_cgroup = memcg; | 6097 | root_mem_cgroup = memcg; |
| 6112 | for_each_possible_cpu(cpu) { | 6098 | for_each_possible_cpu(cpu) { |
| 6113 | struct memcg_stock_pcp *stock = | 6099 | struct memcg_stock_pcp *stock = |
| @@ -6850,6 +6836,7 @@ static int __init mem_cgroup_init(void) | |||
| 6850 | { | 6836 | { |
| 6851 | hotcpu_notifier(memcg_cpu_hotplug_callback, 0); | 6837 | hotcpu_notifier(memcg_cpu_hotplug_callback, 0); |
| 6852 | enable_swap_cgroup(); | 6838 | enable_swap_cgroup(); |
| 6839 | mem_cgroup_soft_limit_tree_init(); | ||
| 6853 | return 0; | 6840 | return 0; |
| 6854 | } | 6841 | } |
| 6855 | subsys_initcall(mem_cgroup_init); | 6842 | subsys_initcall(mem_cgroup_init); |
