Hello, Li. On Tue, Sep 02, 2014 at 06:56:58PM +0800, Li Zefan wrote: > for ((; ;)) > { > echo $$ > /cgroup/sub/cgroup.procs > ech $$ > /cgce 6f2e0c38c2108a74 ]--- ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ copy & paste error? ... > Reported-by: Toralf Förster <toralf.foerster@xxxxxx> > Signed-off-by: Li Zefan <lizefan@xxxxxxxxxx> > --- > > Toralf, Thanks for reporting the bug. I'm not able to repy to your email, > because I was kicked out of the cgroup mailing list so didn't receive > emails from mailing list for a week. > > --- > kernel/cgroup.c | 19 +++++++++---------- > 1 file changed, 9 insertions(+), 10 deletions(-) > > diff --git a/kernel/cgroup.c b/kernel/cgroup.c > index 1c56924..e03fc62 100644 > --- a/kernel/cgroup.c > +++ b/kernel/cgroup.c > @@ -4185,6 +4185,15 @@ static void css_release_work_fn(struct work_struct *work) > > mutex_unlock(&cgroup_mutex); > > + /* > + * There are two control paths which try to determine cgroup from > + * dentry without going through kernfs - cgroupstats_build() and > + * css_tryget_online_from_dir(). Those are supported by RCU > + * protecting clearing of cgrp->kn->priv backpointer. > + */ > + if (!ss && cgroup_parent(cgrp)) > + RCU_INIT_POINTER(*(void __rcu __force **)&cgrp->kn->priv, NULL); Can we move the above into the preceding else block? I don't think holding cgroup_mutex or not makes any difference here. Also, why do we need the cgroup_parent() check? Do we deref root's kn->priv in the destruction path? If so, can you please note that in the comment? Thanks. -- tejun -- To unsubscribe from this list: send the line "unsubscribe cgroups" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html