On Fri, Nov 19, 2021 at 8:50 PM Mina Almasry <almasrymina@xxxxxxxxxx> 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; > +} > +