diff options
author | Paul Menage <menage@google.com> | 2009-01-07 21:08:36 -0500 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2009-01-08 11:31:10 -0500 |
commit | 999cd8a450f8f93701669a61cac4d3b19eca07e8 (patch) | |
tree | 990e5b08e6db971d2e9943f89abf39e7c8f4cb1e /Documentation/cgroups/cgroups.txt | |
parent | b5a84319a4343a0db753436fd8147e61eaafa7ea (diff) |
cgroups: add a per-subsystem hierarchy_mutex
These patches introduce new locking/refcount support for cgroups to
reduce the need for subsystems to call cgroup_lock(). This will
ultimately allow the atomicity of cgroup_rmdir() (which was removed
recently) to be restored.
These three patches give:
1/3 - introduce a per-subsystem hierarchy_mutex which a subsystem can
use to prevent changes to its own cgroup tree
2/3 - use hierarchy_mutex in place of calling cgroup_lock() in the
memory controller
3/3 - introduce a css_tryget() function similar to the one recently
proposed by Kamezawa, but avoiding spurious refcount failures in
the event of a race between a css_tryget() and an unsuccessful
cgroup_rmdir()
Future patches will likely involve:
- using hierarchy mutex in place of cgroup_lock() in more subsystems
where appropriate
- restoring the atomicity of cgroup_rmdir() with respect to cgroup_create()
This patch:
Add a hierarchy_mutex to the cgroup_subsys object that protects changes to
the hierarchy observed by that subsystem. It is taken by the cgroup
subsystem (in addition to cgroup_mutex) for the following operations:
- linking a cgroup into that subsystem's cgroup tree
- unlinking a cgroup from that subsystem's cgroup tree
- moving the subsystem to/from a hierarchy (including across the
bind() callback)
Thus if the subsystem holds its own hierarchy_mutex, it can safely
traverse its own hierarchy.
Signed-off-by: Paul Menage <menage@google.com>
Tested-by: KAMEZAWA Hiroyuki <kamezawa.hiroyu@jp.fujitsu.com>
Cc: Li Zefan <lizf@cn.fujitsu.com>
Cc: Balbir Singh <balbir@in.ibm.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Diffstat (limited to 'Documentation/cgroups/cgroups.txt')
-rw-r--r-- | Documentation/cgroups/cgroups.txt | 2 |
1 files changed, 1 insertions, 1 deletions
diff --git a/Documentation/cgroups/cgroups.txt b/Documentation/cgroups/cgroups.txt index 60287e9e9d27..e33ee74eee77 100644 --- a/Documentation/cgroups/cgroups.txt +++ b/Documentation/cgroups/cgroups.txt | |||
@@ -528,7 +528,7 @@ example in cpusets, no task may attach before 'cpus' and 'mems' are set | |||
528 | up. | 528 | up. |
529 | 529 | ||
530 | void bind(struct cgroup_subsys *ss, struct cgroup *root) | 530 | void bind(struct cgroup_subsys *ss, struct cgroup *root) |
531 | (cgroup_mutex held by caller) | 531 | (cgroup_mutex and ss->hierarchy_mutex held by caller) |
532 | 532 | ||
533 | Called when a cgroup subsystem is rebound to a different hierarchy | 533 | Called when a cgroup subsystem is rebound to a different hierarchy |
534 | and root cgroup. Currently this will only involve movement between | 534 | and root cgroup. Currently this will only involve movement between |