Currently, memcg_oom_lock is used for this, but I'm going to get rid of
it in the following patch, so introduce a dedicated lock.

Signed-off-by: Vladimir Davydov <[email protected]>
---
 mm/memcontrol.c | 14 ++++++++++----
 1 file changed, 10 insertions(+), 4 deletions(-)

diff --git a/mm/memcontrol.c b/mm/memcontrol.c
index 9f2d1d518df4..df98b3dfe0f1 100644
--- a/mm/memcontrol.c
+++ b/mm/memcontrol.c
@@ -5766,12 +5766,18 @@ static int compare_thresholds(const void *a, const void 
*b)
        return 0;
 }
 
+static DEFINE_SPINLOCK(memcg_oom_notify_lock);
+
 static int mem_cgroup_oom_notify_cb(struct mem_cgroup *memcg)
 {
        struct mem_cgroup_eventfd_list *ev;
 
+       spin_lock(&memcg_oom_notify_lock);
+
        list_for_each_entry(ev, &memcg->oom_notify, list)
                eventfd_signal(ev->eventfd, 1);
+
+       spin_unlock(&memcg_oom_notify_lock);
        return 0;
 }
 
@@ -5957,7 +5963,7 @@ static int mem_cgroup_oom_register_event(struct cgroup 
*cgrp,
        if (!event)
                return -ENOMEM;
 
-       spin_lock(&memcg_oom_lock);
+       spin_lock(&memcg_oom_notify_lock);
 
        event->eventfd = eventfd;
        list_add(&event->list, &memcg->oom_notify);
@@ -5965,7 +5971,7 @@ static int mem_cgroup_oom_register_event(struct cgroup 
*cgrp,
        /* already in OOM ? */
        if (atomic_read(&memcg->under_oom))
                eventfd_signal(eventfd, 1);
-       spin_unlock(&memcg_oom_lock);
+       spin_unlock(&memcg_oom_notify_lock);
 
        return 0;
 }
@@ -5979,7 +5985,7 @@ static void mem_cgroup_oom_unregister_event(struct cgroup 
*cgrp,
 
        BUG_ON(type != _OOM_TYPE);
 
-       spin_lock(&memcg_oom_lock);
+       spin_lock(&memcg_oom_notify_lock);
 
        list_for_each_entry_safe(ev, tmp, &memcg->oom_notify, list) {
                if (ev->eventfd == eventfd) {
@@ -5988,7 +5994,7 @@ static void mem_cgroup_oom_unregister_event(struct cgroup 
*cgrp,
                }
        }
 
-       spin_unlock(&memcg_oom_lock);
+       spin_unlock(&memcg_oom_notify_lock);
 }
 
 static int mem_cgroup_oom_control_read(struct cgroup *cgrp,
-- 
2.1.4

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

Reply via email to