Re: [PATCH v4 2/4] mm/oom: handle remote ooms
From: Shakeel Butt <hidden>
Date: 2021-11-20 07:58:36
Also in:
linux-fsdevel, linux-mm, lkml
From: Shakeel Butt <hidden>
Date: 2021-11-20 07:58:36
Also in:
linux-fsdevel, linux-mm, lkml
On Fri, Nov 19, 2021 at 8:50 PM Mina Almasry [off-list ref] wrote:
[...]
+/*
+ * Returns true if current's mm is a descendant of the memcg_under_oom (or
+ * equal to it). False otherwise. This is used by the oom-killer to detect
+ * ooms due to remote charging.
+ */
+bool is_remote_oom(struct mem_cgroup *memcg_under_oom)
+{
+ struct mem_cgroup *current_memcg;
+ bool is_remote_oom;
+
+ if (!memcg_under_oom)
+ return false;
+
+ rcu_read_lock();
+ current_memcg = mem_cgroup_from_task(current);
+ if (current_memcg && !css_tryget_online(¤t_memcg->css))No need to grab a reference. You can call mem_cgroup_is_descendant() within rcu.
+ current_memcg = NULL; + rcu_read_unlock(); + + if (!current_memcg) + return false; + + is_remote_oom = + !mem_cgroup_is_descendant(current_memcg, memcg_under_oom); + css_put(¤t_memcg->css); + + return is_remote_oom; +} +