diff options
| author | Paul Menage <menage@google.com> | 2007-10-19 02:39:38 -0400 |
|---|---|---|
| committer | Linus Torvalds <torvalds@woody.linux-foundation.org> | 2007-10-19 14:53:36 -0400 |
| commit | 81a6a5cdd2c5cd70874b88afe524ab09e9e869af (patch) | |
| tree | ba46c47a0692b687a96e52e61bfda4f14457017f /include/linux/cgroup.h | |
| parent | 817929ec274bcfe771586d338bb31d1659615686 (diff) | |
Task Control Groups: automatic userspace notification of idle cgroups
Add the following files to the cgroup filesystem:
notify_on_release - configures/reports whether the cgroup subsystem should
attempt to run a release script when this cgroup becomes unused
release_agent - configures/reports the release agent to be used for this
hierarchy (top level in each hierarchy only)
releasable - reports whether this cgroup would have been auto-released if
notify_on_release was true and a release agent was configured (mainly useful
for debugging)
To avoid locking issues, invoking the userspace release agent is done via a
workqueue task; cgroups that need to have their release agents invoked by
the workqueue task are linked on to a list.
[pj@sgi.com: Need to include kmod.h]
Signed-off-by: Paul Menage <menage@google.com>
Cc: Serge E. Hallyn <serue@us.ibm.com>
Cc: "Eric W. Biederman" <ebiederm@xmission.com>
Cc: Dave Hansen <haveblue@us.ibm.com>
Cc: Balbir Singh <balbir@in.ibm.com>
Cc: Paul Jackson <pj@sgi.com>
Cc: Kirill Korotaev <dev@openvz.org>
Cc: Herbert Poetzl <herbert@13thfloor.at>
Cc: Srivatsa Vaddagiri <vatsa@in.ibm.com>
Cc: Cedric Le Goater <clg@fr.ibm.com>
Signed-off-by: Paul Jackson <pj@sgi.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Diffstat (limited to 'include/linux/cgroup.h')
| -rw-r--r-- | include/linux/cgroup.h | 11 |
1 files changed, 9 insertions, 2 deletions
diff --git a/include/linux/cgroup.h b/include/linux/cgroup.h index 836b3557bb..9e9b7efa18 100644 --- a/include/linux/cgroup.h +++ b/include/linux/cgroup.h | |||
| @@ -77,10 +77,11 @@ static inline void css_get(struct cgroup_subsys_state *css) | |||
| 77 | * css_get() | 77 | * css_get() |
| 78 | */ | 78 | */ |
| 79 | 79 | ||
| 80 | extern void __css_put(struct cgroup_subsys_state *css); | ||
| 80 | static inline void css_put(struct cgroup_subsys_state *css) | 81 | static inline void css_put(struct cgroup_subsys_state *css) |
| 81 | { | 82 | { |
| 82 | if (!test_bit(CSS_ROOT, &css->flags)) | 83 | if (!test_bit(CSS_ROOT, &css->flags)) |
| 83 | atomic_dec(&css->refcnt); | 84 | __css_put(css); |
| 84 | } | 85 | } |
| 85 | 86 | ||
| 86 | struct cgroup { | 87 | struct cgroup { |
| @@ -112,6 +113,13 @@ struct cgroup { | |||
| 112 | * tasks in this cgroup. Protected by css_set_lock | 113 | * tasks in this cgroup. Protected by css_set_lock |
| 113 | */ | 114 | */ |
| 114 | struct list_head css_sets; | 115 | struct list_head css_sets; |
| 116 | |||
| 117 | /* | ||
| 118 | * Linked list running through all cgroups that can | ||
| 119 | * potentially be reaped by the release agent. Protected by | ||
| 120 | * release_list_lock | ||
| 121 | */ | ||
| 122 | struct list_head release_list; | ||
| 115 | }; | 123 | }; |
| 116 | 124 | ||
| 117 | /* A css_set is a structure holding pointers to a set of | 125 | /* A css_set is a structure holding pointers to a set of |
| @@ -293,7 +301,6 @@ struct task_struct *cgroup_iter_next(struct cgroup *cont, | |||
| 293 | struct cgroup_iter *it); | 301 | struct cgroup_iter *it); |
| 294 | void cgroup_iter_end(struct cgroup *cont, struct cgroup_iter *it); | 302 | void cgroup_iter_end(struct cgroup *cont, struct cgroup_iter *it); |
| 295 | 303 | ||
| 296 | |||
| 297 | #else /* !CONFIG_CGROUPS */ | 304 | #else /* !CONFIG_CGROUPS */ |
| 298 | 305 | ||
| 299 | static inline int cgroup_init_early(void) { return 0; } | 306 | static inline int cgroup_init_early(void) { return 0; } |
