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@xxxxxxxxxxx: better comment to explain reclaim model] > > Signed-off-by: Wei Yang <richard.weiyang@xxxxxxxxx> > Acked-by: Johannes Weiner <hannes@xxxxxxxxxxx> Reviewed-by: Roman Gushchin <roman.gushchin@xxxxxxxxx> > > --- > 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 > >