Message ID | 20220330234719.18340-4-richard.weiyang@gmail.com (mailing list archive) |
---|---|
State | New |
Headers | show |
Series | mm/memcg: some cleanup for mem_cgroup_iter() | expand |
On Wed, Mar 30, 2022 at 11:47:19PM +0000, Wei Yang wrote: > For each round-trip, we assign generation on first invocation and > compare it on subsequent invocations. > > Let's move them together to make it more self-explaining. Also this > reduce a check on prev. > > [hannes@cmpxchg.org: better comment to explain reclaim model] > > Signed-off-by: Wei Yang <richard.weiyang@gmail.com> > Acked-by: Johannes Weiner <hannes@cmpxchg.org> Reviewed-by: Roman Gushchin <roman.gushchin@linux.dev> > > --- > v2: a better comment from Johannes > --- > mm/memcontrol.c | 10 +++++++--- > 1 file changed, 7 insertions(+), 3 deletions(-) > > diff --git a/mm/memcontrol.c b/mm/memcontrol.c > index 5d433b79ba47..2cd8bfdec379 100644 > --- a/mm/memcontrol.c > +++ b/mm/memcontrol.c > @@ -1013,7 +1013,13 @@ struct mem_cgroup *mem_cgroup_iter(struct mem_cgroup *root, > mz = root->nodeinfo[reclaim->pgdat->node_id]; > iter = &mz->iter; > > - if (prev && reclaim->generation != iter->generation) > + /* > + * On start, join the current reclaim iteration cycle. > + * Exit when a concurrent walker completes it. > + */ > + if (!prev) > + reclaim->generation = iter->generation; > + else if (reclaim->generation != iter->generation) > goto out_unlock; > > while (1) { > @@ -1075,8 +1081,6 @@ struct mem_cgroup *mem_cgroup_iter(struct mem_cgroup *root, > > if (!memcg) > iter->generation++; > - else if (!prev) > - reclaim->generation = iter->generation; > } > > out_unlock: > -- > 2.33.1 > >
diff --git a/mm/memcontrol.c b/mm/memcontrol.c index 5d433b79ba47..2cd8bfdec379 100644 --- a/mm/memcontrol.c +++ b/mm/memcontrol.c @@ -1013,7 +1013,13 @@ struct mem_cgroup *mem_cgroup_iter(struct mem_cgroup *root, mz = root->nodeinfo[reclaim->pgdat->node_id]; iter = &mz->iter; - if (prev && reclaim->generation != iter->generation) + /* + * On start, join the current reclaim iteration cycle. + * Exit when a concurrent walker completes it. + */ + if (!prev) + reclaim->generation = iter->generation; + else if (reclaim->generation != iter->generation) goto out_unlock; while (1) { @@ -1075,8 +1081,6 @@ struct mem_cgroup *mem_cgroup_iter(struct mem_cgroup *root, if (!memcg) iter->generation++; - else if (!prev) - reclaim->generation = iter->generation; } out_unlock: