cgroup: call cgroup_subsys->bind on cgroup subsys initialization
authorVladimir Davydov <vdavydov@parallels.com>
Thu, 19 Feb 2015 14:34:46 +0000 (17:34 +0300)
committerTejun Heo <tj@kernel.org>
Mon, 2 Mar 2015 17:11:01 +0000 (12:11 -0500)
Currently, we call cgroup_subsys->bind only on unmount, remount, and
when creating a new root on mount. Since the default hierarchy root is
created in cgroup_init, we will not call cgroup_subsys->bind if the
default hierarchy is freshly mounted. As a result, some controllers will
behave incorrectly (most notably, the "memory" controller will not
enable hierarchy support). Fix this by calling cgroup_subsys->bind right
after initializing a cgroup subsystem.

Signed-off-by: Vladimir Davydov <vdavydov@parallels.com>
Signed-off-by: Tejun Heo <tj@kernel.org>
kernel/cgroup.c

index 29a7b2cc593e3f50a425f1dbbf187d5d1fb4542f..21a4b6d61e21a8c5edadea13ed1e6cc2aac2c476 100644 (file)
@@ -5040,6 +5040,9 @@ int __init cgroup_init(void)
                        WARN_ON(cgroup_add_dfl_cftypes(ss, ss->dfl_cftypes));
                        WARN_ON(cgroup_add_legacy_cftypes(ss, ss->legacy_cftypes));
                }
+
+               if (ss->bind)
+                       ss->bind(init_css_set.subsys[ssid]);
        }
 
        cgroup_kobj = kobject_create_and_add("cgroup", fs_kobj);