• Paul Menage's avatar
    cgroups: add css_tryget() · e7c5ec91
    Paul Menage authored
    Add css_tryget(), that obtains a counted reference on a CSS.  It is used
    in situations where the caller has a "weak" reference to the CSS, i.e.
    one that does not protect the cgroup from removal via a reference count,
    but would instead be cleaned up by a destroy() callback.
    
    css_tryget() will return true on success, or false if the cgroup is being
    removed.
    
    This is similar to Kamezawa Hiroyuki's patch from a week or two ago, but
    with the difference that in the event of css_tryget() racing with a
    cgroup_rmdir(), css_tryget() will only return false if the cgroup really
    does get removed.
    
    This implementation is done by biasing css->refcnt, so that a refcnt of 1
    means "releasable" and 0 means "released or releasing".  In the event of a
    race, css_tryget() distinguishes between "released" and "releasing" by
    checking for the CSS_REMOVED flag in css->flags.
    Signed-off-by: default avatarPaul Menage <menage@google.com>
    Tested-by: default avatarKAMEZAWA Hiroyuki <kamezawa.hiroyu@jp.fujitsu.com>
    Cc: Li Zefan <lizf@cn.fujitsu.com>
    Cc: Balbir Singh <balbir@in.ibm.com>
    Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
    Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
    e7c5ec91
cgroup.c 84.1 KB