[PATCH v2 cgroup 1/2] cgroup: move module ref handling into rebind_subsystems()

Li Zefan 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 mailing list