Re: [PATCH] memcg: fix use_hierarchy css_is_ancestor oops regression

Hugh Dickins
2012-06-10T22:53:39Z

On Mon, 11 Jun 2012, Johannes Weiner wrote:
> On Sun, Jun 10, 2012 at 11:54:47AM -0700, Hugh Dickins wrote:
> > If use_hierarchy is set, reclaim testing soon oopses in css_is_ancestor()
> > called from __mem_cgroup_same_or_subtree() called from page_referenced():
> > when processes are exiting, it's easy for mm_match_cgroup() to pass along
> > a NULL memcg coming from a NULL mm->owner.
> >
> > Check for that in __mem_cgroup_same_or_subtree(). Return true or false?
> > False because we cannot know if it was in the hierarchy, but also false
> > because it's better not to count a reference from an exiting process.
> >
> > Signed-off-by: Hugh Dickins <hughd@google.com>
>
> Looks like an older version of the patch that introduced it slipped
> into the tree, Konstantin noted this problem during review. The final
> version did
>
> match = memcg && __mem_cgroup_same_or_subtree(root, memcg);
>
> in the caller because of it.
>
> Do you think it would be cleaner this way, since this is also the
> place where that memcg is looked up, and so the "can return NULL"
> handling after mem_cgroup_from_task() would be in the same place?

I don't mind, either way.

It depends on whether we add more such uses which could receive a NULL
memcg. I tend to prefer dealing with rare conditions (which this is)
inside the callee, but common conditions before calling from the caller.

But let's let others decide.

>
> But either way,
>
> Acked-by: Johannes Weiner <hannes@cmpxchg.org>
>
> Thanks, Hugh!

And thank you, Hannes!

Hugh