On Mon, Aug 19, 2013 at 10:23:41AM +0800, Li Zefan wrote: > > 105347ba5 ("cgroup: make cgroup_file_open() rcu_read_lock() around > > cgroup_css() and add cfent->css") added cfent->css to cache the > > associted cgroup_subsys_state across file operations. > > > > A cfent is associated with single css throughout its lifetime and the > > origimal commit initialized the cache pointer during cgroup_add_file() > > and verified that it matches the actual one in cgroup_file_open(). > > While this works fine for !root cgroups, it's broken for root cgroups > > as files in a root cgroup are created before the css's are associated > > with the cgroup and thus cgroup_css() call in cgroup_add_file() > > returns NULL associating all cfents in the root cgroup with NULL css. > > This makes cgroup_file_open() trigger WARN and fail with -ENODEV for > > all !core subsystem files in the root cgroups. > > > > There's no reason to initialize cfent->css separately from > > cgroup_add_file(). As the association never changes, > > cgroup_file_open() can set it unconditionally every time and > > containing the logic in cgroup_file_open() makes more sense anyway as > > the only reason it's necessary is file->private_data being already > > occupied. > > > > Fix it by setting cfent->css unconditionally from cgroup_file_open(). > > > > Signed-off-by: Tejun Heo <tj@xxxxxxxxxx> > > Acked-by: Li Zefan <lizefan@xxxxxxxxxx> Applied to cgroup/for-3.12. Thanks. -- tejun _______________________________________________ Containers mailing list Containers@xxxxxxxxxxxxxxxxxxxxxxxxxx https://lists.linuxfoundation.org/mailman/listinfo/containers