aboutsummaryrefslogtreecommitdiffstats
path: root/include
diff options
context:
space:
mode:
authorPaul Menage <menage@google.com>2007-10-19 02:39:38 -0400
committerLinus Torvalds <torvalds@woody.linux-foundation.org>2007-10-19 14:53:36 -0400
commit81a6a5cdd2c5cd70874b88afe524ab09e9e869af (patch)
treeba46c47a0692b687a96e52e61bfda4f14457017f /include
parent817929ec274bcfe771586d338bb31d1659615686 (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')
-rw-r--r--include/linux/cgroup.h11
1 files changed, 9 insertions, 2 deletions
diff --git a/include/linux/cgroup.h b/include/linux/cgroup.h
index 836b3557bb76..9e9b7efa180b 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
80extern void __css_put(struct cgroup_subsys_state *css);
80static inline void css_put(struct cgroup_subsys_state *css) 81static 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
86struct cgroup { 87struct 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);
294void cgroup_iter_end(struct cgroup *cont, struct cgroup_iter *it); 302void cgroup_iter_end(struct cgroup *cont, struct cgroup_iter *it);
295 303
296
297#else /* !CONFIG_CGROUPS */ 304#else /* !CONFIG_CGROUPS */
298 305
299static inline int cgroup_init_early(void) { return 0; } 306static inline int cgroup_init_early(void) { return 0; }