diff --git a/mm/memcontrol.c b/mm/memcontrol.c index 0bccf2b8cc5998ffc9b9552758ac8985418d36a8..e4f90577571dcc2f98a5d1ea8cc9d2f1fad4e06f 100644 --- a/mm/memcontrol.c +++ b/mm/memcontrol.c @@ -4923,20 +4923,23 @@ static struct mem_cgroup *mem_cgroup_alloc(void) struct mem_cgroup_extension *memcg_ext; size_t size; int node; + long error = -ENOMEM; size = sizeof(struct mem_cgroup_extension); size += nr_node_ids * sizeof(struct mem_cgroup_per_node *); memcg_ext = kzalloc(size, GFP_KERNEL); if (!memcg_ext) - return NULL; + return ERR_PTR(error); memcg = &memcg_ext->memcg; memcg->id.id = idr_alloc(&mem_cgroup_idr, NULL, 1, MEM_CGROUP_ID_MAX, GFP_KERNEL); - if (memcg->id.id < 0) + if (memcg->id.id < 0) { + error = memcg->id.id; goto fail; + } memcg_ext->vmstats_local = alloc_percpu(struct mem_cgroup_stat_cpu); if (!memcg_ext->vmstats_local) @@ -4978,7 +4981,7 @@ static struct mem_cgroup *mem_cgroup_alloc(void) fail: mem_cgroup_id_remove(memcg); __mem_cgroup_free(memcg); - return NULL; + return ERR_PTR(error); } static struct cgroup_subsys_state * __ref @@ -4989,8 +4992,8 @@ mem_cgroup_css_alloc(struct cgroup_subsys_state *parent_css) long error = -ENOMEM; memcg = mem_cgroup_alloc(); - if (!memcg) - return ERR_PTR(error); + if (IS_ERR(memcg)) + return ERR_CAST(memcg); memcg->high = PAGE_COUNTER_MAX; memcg->soft_limit = PAGE_COUNTER_MAX; @@ -5037,7 +5040,7 @@ mem_cgroup_css_alloc(struct cgroup_subsys_state *parent_css) fail: mem_cgroup_id_remove(memcg); mem_cgroup_free(memcg); - return ERR_PTR(-ENOMEM); + return ERR_PTR(error); } static int mem_cgroup_css_online(struct cgroup_subsys_state *css)