[PATCH v2 cgroup 1/2] cgroup: move module ref handling into rebind_subsystems()
lizefan at huawei.com
Mon Jul 15 02:54:18 UTC 2013
On 2013/7/13 4:38, Tejun Heo wrote:
> Module ref handling in cgroup is rather weird.
> parse_cgroupfs_options() grabs all the modules for the specified
> subsystems. A module ref is kept if the specified subsystem is newly
> bound to the hierarchy. If not, or the operation fails, the refs are
> dropped. This scatters module ref handling across multiple functions
> making it difficult to track. It also make the function nasty to use
> for dynamic subsystem binding which is necessary for the planned
> unified hierarchy.
> There's nothing which requires the subsystem modules to be pinned
> between parse_cgroupfs_options() and rebind_subsystems() in both mount
> and remount paths. parse_cgroupfs_options() can just parse and
> rebind_subsystems() can handle pinning the subsystems that it wants to
> bind, which is a natural part of its task - binding - anyway.
> Move module ref handling into rebind_subsystems() which makes the code
> a lot simpler - modules are gotten iff it's gonna be bound and put iff
> unbound or binding fails.
> v2: Li pointed out that if a controller module is unloaded between
> parsing and binding, rebind_subsystems() won't notice the missing
> controller as it only iterates through existing controllers. Fix
> it by updating rebind_subsystems() to compare @added_mask to
> @pinned and fail with -ENOENT if they don't match.
> Signed-off-by: Tejun Heo <tj at kernel.org>
> Cc: Li Zefan <lizefan at huawei.com>
Acked-by: Li Zefan <lizefan at huawei.com>
More information about the Containers