• Ben Blum's avatar
    cgroups: revamp subsys array · aae8aab4
    Ben Blum authored
    This patch series provides the ability for cgroup subsystems to be
    compiled as modules both within and outside the kernel tree.  This is
    mainly useful for classifiers and subsystems that hook into components
    that are already modules.  cls_cgroup and blkio-cgroup serve as the
    example use cases for this feature.
    
    It provides an interface cgroup_load_subsys() and cgroup_unload_subsys()
    which modular subsystems can use to register and depart during runtime.
    The net_cls classifier subsystem serves as the example for a subsystem
    which can be converted into a module using these changes.
    
    Patch #1 sets up the subsys[] array so its contents can be dynamic as
    modules appear and (eventually) disappear.  Iterations over the array are
    modified to handle when subsystems are absent, and the dynamic section of
    the array is protected by cgroup_mutex.
    
    Patch #2 implements an interface for modules to load subsystems, called
    cgroup_load_subsys, similar to cgroup_init_subsys, and adds a module
    pointer in struct cgroup_subsys.
    
    Patch #3 adds a mechanism for unloading modular subsystems, which includes
    a more advanced rework of the rudimentary reference counting introduced in
    patch 2.
    
    Patch #4 modifies the net_cls subsystem, which already had some module
    declarations, to be configurable as a module, which also serves as a
    simple proof-of-concept.
    
    Part of implementing patches 2 and 4 involved updating css pointers in
    each css_set when the module appears or leaves.  In doing this, it was
    discovered that css_sets always remain linked to the dummy cgroup,
    regardless of whether or not any subsystems are actually bound to it
    (i.e., not mounted on an actual hierarchy).  The subsystem loading and
    unloading code therefore should keep in mind the special cases where the
    added subsystem is the only one in the dummy cgroup (and therefore all
    css_sets need to be linked back into it) and where the removed subsys was
    the only one in the dummy cgroup (and therefore all css_sets should be
    unlinked from it) - however, as all css_sets always stay attached to the
    dummy cgroup anyway, these cases are ignored.  Any fix that addresses this
    issue should also make sure these cases are addressed in the subsystem
    loading and unloading code.
    
    This patch:
    
    Make subsys[] able to be dynamically populated to support modular
    subsystems
    
    This patch reworks the way the subsys[] array is used so that subsystems
    can register themselves after boot time, and enables the internals of
    cgroups to be able to handle when subsystems are not present or may
    appear/disappear.
    Signed-off-by: default avatarBen Blum <bblum@andrew.cmu.edu>
    Acked-by: default avatarLi Zefan <lizf@cn.fujitsu.com>
    Cc: Paul Menage <menage@google.com>
    Cc: "David S. Miller" <davem@davemloft.net>
    Cc: KAMEZAWA Hiroyuki <kamezawa.hiroyu@jp.fujitsu.com>
    Cc: Lai Jiangshan <laijs@cn.fujitsu.com>
    Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
    Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
    aae8aab4
cgroup.h 17.5 KB