]> www.infradead.org Git - users/jedix/linux-maple.git/commitdiff
mm/memcg: move generation assignment and comparison together
authorWei Yang <richard.weiyang@gmail.com>
Thu, 14 Apr 2022 06:07:05 +0000 (23:07 -0700)
committerakpm <akpm@linux-foundation.org>
Thu, 14 Apr 2022 06:07:05 +0000 (23:07 -0700)
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]
Link: https://lkml.kernel.org/r/20220330234719.18340-4-richard.weiyang@gmail.com
Signed-off-by: Wei Yang <richard.weiyang@gmail.com>
Acked-by: Johannes Weiner <hannes@cmpxchg.org>
Reviewed-by: Roman Gushchin <roman.gushchin@linux.dev>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
mm/memcontrol.c

index 357960df1f0205fa44b7c4b8d50e3ae472e82125..7a08737bac4bec33cce4a0fa54ed5bc2c894584a 100644 (file)
@@ -1022,7 +1022,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) {
@@ -1084,8 +1090,6 @@ struct mem_cgroup *mem_cgroup_iter(struct mem_cgroup *root,
 
                if (!memcg)
                        iter->generation++;
-               else if (!prev)
-                       reclaim->generation = iter->generation;
        }
 
 out_unlock: