* [patch] memcg: clean up memcg->nodeinfo
@ 2013-06-06 3:05 Johannes Weiner
2013-06-06 4:38 ` David Rientjes
2013-06-06 12:23 ` Michal Hocko
0 siblings, 2 replies; 3+ messages in thread
From: Johannes Weiner @ 2013-06-06 3:05 UTC (permalink / raw)
To: Andrew Morton
Cc: Glauber Costa, Michal Hocko, KAMEZAWA Hiroyuki, linux-mm,
cgroups, linux-kernel
Remove struct mem_cgroup_lru_info and fold its single member, the
variably sized nodeinfo[0], directly into struct mem_cgroup. This
should make it more obvious why it has to be the last member there.
Also move the comment that's above that special last member below it,
so it is more visible to somebody that considers appending to the
struct mem_cgroup.
Signed-off-by: Johannes Weiner <hannes@cmpxchg.org>
---
mm/memcontrol.c | 21 ++++++---------------
1 file changed, 6 insertions(+), 15 deletions(-)
diff --git a/mm/memcontrol.c b/mm/memcontrol.c
index ff7b40d..d169a8d 100644
--- a/mm/memcontrol.c
+++ b/mm/memcontrol.c
@@ -187,10 +187,6 @@ struct mem_cgroup_per_node {
struct mem_cgroup_per_zone zoneinfo[MAX_NR_ZONES];
};
-struct mem_cgroup_lru_info {
- struct mem_cgroup_per_node *nodeinfo[0];
-};
-
/*
* Cgroups above their limits are maintained in a RB-Tree, independent of
* their hierarchy representation
@@ -384,14 +380,9 @@ struct mem_cgroup {
#endif
/* when kmem shrinkers can sleep but can't proceed due to context */
struct work_struct kmemcg_shrink_work;
- /*
- * Per cgroup active and inactive list, similar to the
- * per zone LRU lists.
- *
- * WARNING: This has to be the last element of the struct. Don't
- * add new fields after this point.
- */
- struct mem_cgroup_lru_info info;
+
+ struct mem_cgroup_per_node *nodeinfo[0];
+ /* WARNING: nodeinfo has to be the last member here */
};
static size_t memcg_size(void)
@@ -777,7 +768,7 @@ static struct mem_cgroup_per_zone *
mem_cgroup_zoneinfo(struct mem_cgroup *memcg, int nid, int zid)
{
VM_BUG_ON((unsigned)nid >= nr_node_ids);
- return &memcg->info.nodeinfo[nid]->zoneinfo[zid];
+ return &memcg->nodeinfo[nid]->zoneinfo[zid];
}
struct cgroup_subsys_state *mem_cgroup_css(struct mem_cgroup *memcg)
@@ -6595,13 +6586,13 @@ static int alloc_mem_cgroup_per_zone_info(struct mem_cgroup *memcg, int node)
mz->on_tree = false;
mz->memcg = memcg;
}
- memcg->info.nodeinfo[node] = pn;
+ memcg->nodeinfo[node] = pn;
return 0;
}
static void free_mem_cgroup_per_zone_info(struct mem_cgroup *memcg, int node)
{
- kfree(memcg->info.nodeinfo[node]);
+ kfree(memcg->nodeinfo[node]);
}
static struct mem_cgroup *mem_cgroup_alloc(void)
--
1.8.2.3
--
To unsubscribe, send a message with 'unsubscribe linux-mm' in
the body to majordomo@kvack.org. For more info on Linux MM,
see: http://www.linux-mm.org/ .
Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a>
^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: [patch] memcg: clean up memcg->nodeinfo
2013-06-06 3:05 [patch] memcg: clean up memcg->nodeinfo Johannes Weiner
@ 2013-06-06 4:38 ` David Rientjes
2013-06-06 12:23 ` Michal Hocko
1 sibling, 0 replies; 3+ messages in thread
From: David Rientjes @ 2013-06-06 4:38 UTC (permalink / raw)
To: Johannes Weiner
Cc: Andrew Morton, Glauber Costa, Michal Hocko, KAMEZAWA Hiroyuki,
linux-mm, cgroups, linux-kernel
On Wed, 5 Jun 2013, Johannes Weiner wrote:
> diff --git a/mm/memcontrol.c b/mm/memcontrol.c
> index ff7b40d..d169a8d 100644
> --- a/mm/memcontrol.c
> +++ b/mm/memcontrol.c
> @@ -187,10 +187,6 @@ struct mem_cgroup_per_node {
> struct mem_cgroup_per_zone zoneinfo[MAX_NR_ZONES];
> };
>
> -struct mem_cgroup_lru_info {
> - struct mem_cgroup_per_node *nodeinfo[0];
> -};
> -
> /*
> * Cgroups above their limits are maintained in a RB-Tree, independent of
> * their hierarchy representation
> @@ -384,14 +380,9 @@ struct mem_cgroup {
> #endif
> /* when kmem shrinkers can sleep but can't proceed due to context */
> struct work_struct kmemcg_shrink_work;
> - /*
> - * Per cgroup active and inactive list, similar to the
> - * per zone LRU lists.
> - *
> - * WARNING: This has to be the last element of the struct. Don't
> - * add new fields after this point.
> - */
> - struct mem_cgroup_lru_info info;
> +
> + struct mem_cgroup_per_node *nodeinfo[0];
> + /* WARNING: nodeinfo has to be the last member here */
Nice cleanup, but would this be better as a flexible array member? It
would have an incomplete type like it should have instead of sizeof
returning 0.
> };
>
> static size_t memcg_size(void)
> @@ -777,7 +768,7 @@ static struct mem_cgroup_per_zone *
> mem_cgroup_zoneinfo(struct mem_cgroup *memcg, int nid, int zid)
> {
> VM_BUG_ON((unsigned)nid >= nr_node_ids);
> - return &memcg->info.nodeinfo[nid]->zoneinfo[zid];
> + return &memcg->nodeinfo[nid]->zoneinfo[zid];
> }
>
> struct cgroup_subsys_state *mem_cgroup_css(struct mem_cgroup *memcg)
> @@ -6595,13 +6586,13 @@ static int alloc_mem_cgroup_per_zone_info(struct mem_cgroup *memcg, int node)
> mz->on_tree = false;
> mz->memcg = memcg;
> }
> - memcg->info.nodeinfo[node] = pn;
> + memcg->nodeinfo[node] = pn;
> return 0;
> }
>
> static void free_mem_cgroup_per_zone_info(struct mem_cgroup *memcg, int node)
> {
> - kfree(memcg->info.nodeinfo[node]);
> + kfree(memcg->nodeinfo[node]);
> }
>
> static struct mem_cgroup *mem_cgroup_alloc(void)
--
To unsubscribe, send a message with 'unsubscribe linux-mm' in
the body to majordomo@kvack.org. For more info on Linux MM,
see: http://www.linux-mm.org/ .
Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a>
^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: [patch] memcg: clean up memcg->nodeinfo
2013-06-06 3:05 [patch] memcg: clean up memcg->nodeinfo Johannes Weiner
2013-06-06 4:38 ` David Rientjes
@ 2013-06-06 12:23 ` Michal Hocko
1 sibling, 0 replies; 3+ messages in thread
From: Michal Hocko @ 2013-06-06 12:23 UTC (permalink / raw)
To: Johannes Weiner
Cc: Andrew Morton, Glauber Costa, KAMEZAWA Hiroyuki, linux-mm,
cgroups, linux-kernel
On Wed 05-06-13 23:05:34, Johannes Weiner wrote:
> Remove struct mem_cgroup_lru_info and fold its single member, the
> variably sized nodeinfo[0], directly into struct mem_cgroup. This
> should make it more obvious why it has to be the last member there.
>
> Also move the comment that's above that special last member below it,
> so it is more visible to somebody that considers appending to the
> struct mem_cgroup.
>
> Signed-off-by: Johannes Weiner <hannes@cmpxchg.org>
It would be better to make this a regular array in the long term. But
this is definitely an improvement
Acked-by: Michal Hocko <mhocko@suse.cz>
Thanks!
> ---
> mm/memcontrol.c | 21 ++++++---------------
> 1 file changed, 6 insertions(+), 15 deletions(-)
>
> diff --git a/mm/memcontrol.c b/mm/memcontrol.c
> index ff7b40d..d169a8d 100644
> --- a/mm/memcontrol.c
> +++ b/mm/memcontrol.c
> @@ -187,10 +187,6 @@ struct mem_cgroup_per_node {
> struct mem_cgroup_per_zone zoneinfo[MAX_NR_ZONES];
> };
>
> -struct mem_cgroup_lru_info {
> - struct mem_cgroup_per_node *nodeinfo[0];
> -};
> -
> /*
> * Cgroups above their limits are maintained in a RB-Tree, independent of
> * their hierarchy representation
> @@ -384,14 +380,9 @@ struct mem_cgroup {
> #endif
> /* when kmem shrinkers can sleep but can't proceed due to context */
> struct work_struct kmemcg_shrink_work;
> - /*
> - * Per cgroup active and inactive list, similar to the
> - * per zone LRU lists.
> - *
> - * WARNING: This has to be the last element of the struct. Don't
> - * add new fields after this point.
> - */
> - struct mem_cgroup_lru_info info;
> +
> + struct mem_cgroup_per_node *nodeinfo[0];
> + /* WARNING: nodeinfo has to be the last member here */
> };
>
> static size_t memcg_size(void)
> @@ -777,7 +768,7 @@ static struct mem_cgroup_per_zone *
> mem_cgroup_zoneinfo(struct mem_cgroup *memcg, int nid, int zid)
> {
> VM_BUG_ON((unsigned)nid >= nr_node_ids);
> - return &memcg->info.nodeinfo[nid]->zoneinfo[zid];
> + return &memcg->nodeinfo[nid]->zoneinfo[zid];
> }
>
> struct cgroup_subsys_state *mem_cgroup_css(struct mem_cgroup *memcg)
> @@ -6595,13 +6586,13 @@ static int alloc_mem_cgroup_per_zone_info(struct mem_cgroup *memcg, int node)
> mz->on_tree = false;
> mz->memcg = memcg;
> }
> - memcg->info.nodeinfo[node] = pn;
> + memcg->nodeinfo[node] = pn;
> return 0;
> }
>
> static void free_mem_cgroup_per_zone_info(struct mem_cgroup *memcg, int node)
> {
> - kfree(memcg->info.nodeinfo[node]);
> + kfree(memcg->nodeinfo[node]);
> }
>
> static struct mem_cgroup *mem_cgroup_alloc(void)
> --
> 1.8.2.3
>
--
Michal Hocko
SUSE Labs
--
To unsubscribe, send a message with 'unsubscribe linux-mm' in
the body to majordomo@kvack.org. For more info on Linux MM,
see: http://www.linux-mm.org/ .
Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a>
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2013-06-06 12:23 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2013-06-06 3:05 [patch] memcg: clean up memcg->nodeinfo Johannes Weiner
2013-06-06 4:38 ` David Rientjes
2013-06-06 12:23 ` Michal Hocko
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox