|
@@ -54,6 +54,7 @@
|
|
|
#include <linux/page_cgroup.h>
|
|
|
#include <linux/cpu.h>
|
|
|
#include <linux/oom.h>
|
|
|
+#include <linux/lockdep.h>
|
|
|
#include "internal.h"
|
|
|
#include <net/sock.h>
|
|
|
#include <net/ip.h>
|
|
@@ -2046,6 +2047,12 @@ static int mem_cgroup_soft_reclaim(struct mem_cgroup *root_memcg,
|
|
|
return total;
|
|
|
}
|
|
|
|
|
|
+#ifdef CONFIG_LOCKDEP
|
|
|
+static struct lockdep_map memcg_oom_lock_dep_map = {
|
|
|
+ .name = "memcg_oom_lock",
|
|
|
+};
|
|
|
+#endif
|
|
|
+
|
|
|
static DEFINE_SPINLOCK(memcg_oom_lock);
|
|
|
|
|
|
/*
|
|
@@ -2083,7 +2090,8 @@ static bool mem_cgroup_oom_trylock(struct mem_cgroup *memcg)
|
|
|
}
|
|
|
iter->oom_lock = false;
|
|
|
}
|
|
|
- }
|
|
|
+ } else
|
|
|
+ mutex_acquire(&memcg_oom_lock_dep_map, 0, 1, _RET_IP_);
|
|
|
|
|
|
spin_unlock(&memcg_oom_lock);
|
|
|
|
|
@@ -2095,6 +2103,7 @@ static void mem_cgroup_oom_unlock(struct mem_cgroup *memcg)
|
|
|
struct mem_cgroup *iter;
|
|
|
|
|
|
spin_lock(&memcg_oom_lock);
|
|
|
+ mutex_release(&memcg_oom_lock_dep_map, 1, _RET_IP_);
|
|
|
for_each_mem_cgroup_tree(iter, memcg)
|
|
|
iter->oom_lock = false;
|
|
|
spin_unlock(&memcg_oom_lock);
|