As we now have stable and reliable iter->last_visited,
don't need to save/compare number of destroyed cgroups.

https://jira.sw.ru/browse/PSBM-123655

Signed-off-by: Konstantin Khorenko <[email protected]>
---
 mm/memcontrol.c | 22 ++++------------------
 1 file changed, 4 insertions(+), 18 deletions(-)

diff --git a/mm/memcontrol.c b/mm/memcontrol.c
index 62bc824adb53..73c0232e6303 100644
--- a/mm/memcontrol.c
+++ b/mm/memcontrol.c
@@ -196,7 +196,6 @@ struct mem_cgroup_reclaim_iter {
         * If stored memcg is destroyed, the field is wiped.
         */
        struct mem_cgroup *last_visited;
-       unsigned long last_dead_count;
        seqlock_t last_visited_lock;
 
        /* scan generation, increased every round-trip */
@@ -403,7 +402,6 @@ struct mem_cgroup {
        spinlock_t pcp_counter_lock;
        atomic_long_t   oom;
 
-       atomic_t        dead_count;
 #if defined(CONFIG_MEMCG_KMEM) && defined(CONFIG_INET)
        struct tcp_memcontrol tcp_mem;
        struct udp_memcontrol udp_mem;
@@ -1621,19 +1619,11 @@ static void mem_cgroup_iter_invalidate(struct 
mem_cgroup *root,
                        }
                }
        }
-
-       /*
-        * When a group in the hierarchy below root is destroyed, the
-        * hierarchy iterator can no longer be trusted since it might
-        * have pointed to the destroyed group.  Invalidate it.
-        */
-       atomic_inc(&root->dead_count);
 }
 
 static struct mem_cgroup *
 mem_cgroup_iter_load(struct mem_cgroup_reclaim_iter *iter,
-                    struct mem_cgroup *root,
-                    int *sequence)
+                    struct mem_cgroup *root)
 {
        struct mem_cgroup *position;
        unsigned seq;
@@ -1666,8 +1656,7 @@ mem_cgroup_iter_load(struct mem_cgroup_reclaim_iter *iter,
 static void mem_cgroup_iter_update(struct mem_cgroup_reclaim_iter *iter,
                                   struct mem_cgroup *last_visited,
                                   struct mem_cgroup *new_position,
-                                  struct mem_cgroup *root,
-                                  int sequence)
+                                  struct mem_cgroup *root)
 {
        /*
         * The position saved in 'last_visited' is always valid.
@@ -1676,7 +1665,6 @@ static void mem_cgroup_iter_update(struct 
mem_cgroup_reclaim_iter *iter,
         */
        write_seqlock(&iter->last_visited_lock);
        iter->last_visited = new_position;
-       iter->last_dead_count = sequence;
        write_sequnlock(&iter->last_visited_lock);
 
        /* root reference counting symmetric to mem_cgroup_iter_load */
@@ -1726,7 +1714,6 @@ struct mem_cgroup *mem_cgroup_iter(struct mem_cgroup 
*root,
        rcu_read_lock();
        while (!memcg) {
                struct mem_cgroup_reclaim_iter *uninitialized_var(iter);
-               int uninitialized_var(seq);
 
                if (reclaim) {
                        int nid = zone_to_nid(reclaim->zone);
@@ -1742,14 +1729,13 @@ struct mem_cgroup *mem_cgroup_iter(struct mem_cgroup 
*root,
                                goto out_unlock;
                        }
 
-                       last_visited = mem_cgroup_iter_load(iter, root, &seq);
+                       last_visited = mem_cgroup_iter_load(iter, root);
                }
 
                memcg = __mem_cgroup_iter_next(root, last_visited);
 
                if (reclaim) {
-                       mem_cgroup_iter_update(iter, last_visited, memcg, root,
-                                       seq);
+                       mem_cgroup_iter_update(iter, last_visited, memcg, root);
 
                        if (!memcg)
                                iter->generation++;
-- 
2.24.3

_______________________________________________
Devel mailing list
[email protected]
https://lists.openvz.org/mailman/listinfo/devel

Reply via email to