On Mon 30-09-19 22:42:08, Yafang Shao wrote: > The mem_cgroup_reclaim_cookie is only used in memcg softlimit reclaim now, > and the priority of the reclaim is always 0. We don't need to define the > iter in struct mem_cgroup_per_node as an array any more. That could make > the code more clear and save some space. > > Signed-off-by: Yafang Shao <laoar.shao@xxxxxxxxx> Any changes to the soft limit reclaim are unlikely to happen so I tend to agree that further simplification of the iterator is desirable. Acked-by: Michal Hocko <mhocko@xxxxxxxx> Thanks! > --- > include/linux/memcontrol.h | 3 +-- > mm/memcontrol.c | 11 +++-------- > 2 files changed, 4 insertions(+), 10 deletions(-) > > diff --git a/include/linux/memcontrol.h b/include/linux/memcontrol.h > index 0c762e8..7d99a65 100644 > --- a/include/linux/memcontrol.h > +++ b/include/linux/memcontrol.h > @@ -58,7 +58,6 @@ enum mem_cgroup_protection { > > struct mem_cgroup_reclaim_cookie { > pg_data_t *pgdat; > - int priority; > unsigned int generation; > }; > > @@ -126,7 +125,7 @@ struct mem_cgroup_per_node { > > unsigned long lru_zone_size[MAX_NR_ZONES][NR_LRU_LISTS]; > > - struct mem_cgroup_reclaim_iter iter[DEF_PRIORITY + 1]; > + struct mem_cgroup_reclaim_iter iter; > > struct memcg_shrinker_map __rcu *shrinker_map; > > diff --git a/mm/memcontrol.c b/mm/memcontrol.c > index 1c4c08b..5d9b00f 100644 > --- a/mm/memcontrol.c > +++ b/mm/memcontrol.c > @@ -1052,7 +1052,7 @@ struct mem_cgroup *mem_cgroup_iter(struct mem_cgroup *root, > struct mem_cgroup_per_node *mz; > > mz = mem_cgroup_nodeinfo(root, reclaim->pgdat->node_id); > - iter = &mz->iter[reclaim->priority]; > + iter = &mz->iter; > > if (prev && reclaim->generation != iter->generation) > goto out_unlock; > @@ -1152,15 +1152,11 @@ static void __invalidate_reclaim_iterators(struct mem_cgroup *from, > struct mem_cgroup_reclaim_iter *iter; > struct mem_cgroup_per_node *mz; > int nid; > - int i; > > for_each_node(nid) { > mz = mem_cgroup_nodeinfo(from, nid); > - for (i = 0; i <= DEF_PRIORITY; i++) { > - iter = &mz->iter[i]; > - cmpxchg(&iter->position, > - dead_memcg, NULL); > - } > + iter = &mz->iter; > + cmpxchg(&iter->position, dead_memcg, NULL); > } > } > > @@ -1705,7 +1701,6 @@ static int mem_cgroup_soft_reclaim(struct mem_cgroup *root_memcg, > unsigned long nr_scanned; > struct mem_cgroup_reclaim_cookie reclaim = { > .pgdat = pgdat, > - .priority = 0, > }; > > excess = soft_limit_excess(root_memcg); > -- > 1.8.3.1 -- Michal Hocko SUSE Labs