Skip to content

Commit 2059c8e

Browse files
Chen Ridongakpm00
authored andcommitted
memcg: call the free function when allocation of pn fails
The 'free_mem_cgroup_per_node_info' function is used to free the 'mem_cgroup_per_node' struct. Using 'pn' as the input for the free_mem_cgroup_per_node_info function will be much clearer. Call 'free_mem_cgroup_per_node_info' when 'alloc_mem_cgroup_per_node_info' fails, to free 'pn' as a whole, which makes the code more cohesive. Link: https://lkml.kernel.org/r/20250124073514.2375622-3-chenridong@huaweicloud.com Signed-off-by: Chen Ridong <chenridong@huawei.com> Reviewed-by: Michal Koutný <mkoutny@suse.com> Acked-by: Shakeel Butt <shakeel.butt@linux.dev> Acked-by: Johannes Weiner <hannes@cmpxchg.org> Acked-by: Roman Gushchin <roman.gushchin@linux.dev> Cc: David Finkel <davidf@vimeo.com> Cc: Michal Hocko <mhocko@kernel.org> Cc: Michal Hocko <mhocko@suse.com> Cc: Muchun Song <muchun.song@linux.dev> Cc: Muchun Song <songmuchun@bytedance.com> Cc: Vlastimil Babka <vbabka@suse.cz> Cc: Wang Weiyang <wangweiyang2@huawei.com> Cc: Yosry Ahmed <yosryahmed@google.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
1 parent 1c81f1a commit 2059c8e

File tree

1 file changed

+12
-15
lines changed

1 file changed

+12
-15
lines changed

mm/memcontrol.c

Lines changed: 12 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -3433,6 +3433,16 @@ struct mem_cgroup *mem_cgroup_get_from_ino(unsigned long ino)
34333433
}
34343434
#endif
34353435

3436+
static void free_mem_cgroup_per_node_info(struct mem_cgroup_per_node *pn)
3437+
{
3438+
if (!pn)
3439+
return;
3440+
3441+
free_percpu(pn->lruvec_stats_percpu);
3442+
kfree(pn->lruvec_stats);
3443+
kfree(pn);
3444+
}
3445+
34363446
static bool alloc_mem_cgroup_per_node_info(struct mem_cgroup *memcg, int node)
34373447
{
34383448
struct mem_cgroup_per_node *pn;
@@ -3457,31 +3467,18 @@ static bool alloc_mem_cgroup_per_node_info(struct mem_cgroup *memcg, int node)
34573467
memcg->nodeinfo[node] = pn;
34583468
return true;
34593469
fail:
3460-
kfree(pn->lruvec_stats);
3461-
kfree(pn);
3470+
free_mem_cgroup_per_node_info(pn);
34623471
return false;
34633472
}
34643473

3465-
static void free_mem_cgroup_per_node_info(struct mem_cgroup *memcg, int node)
3466-
{
3467-
struct mem_cgroup_per_node *pn = memcg->nodeinfo[node];
3468-
3469-
if (!pn)
3470-
return;
3471-
3472-
free_percpu(pn->lruvec_stats_percpu);
3473-
kfree(pn->lruvec_stats);
3474-
kfree(pn);
3475-
}
3476-
34773474
static void __mem_cgroup_free(struct mem_cgroup *memcg)
34783475
{
34793476
int node;
34803477

34813478
obj_cgroup_put(memcg->orig_objcg);
34823479

34833480
for_each_node(node)
3484-
free_mem_cgroup_per_node_info(memcg, node);
3481+
free_mem_cgroup_per_node_info(memcg->nodeinfo[node]);
34853482
memcg1_free_events(memcg);
34863483
kfree(memcg->vmstats);
34873484
free_percpu(memcg->vmstats_percpu);

0 commit comments

Comments
 (0)