]> Pileus Git - ~andy/linux/blobdiff - include/linux/cgroup.h
Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/sage/ceph...
[~andy/linux] / include / linux / cgroup.h
index 1b7f9d5250131fe43acf75045142b544f6f1a396..e9b602151caf1ae4105c4c11023431aaabea7cb4 100644 (file)
@@ -319,7 +319,7 @@ struct cftype {
         * If not 0, file mode is set to this value, otherwise it will
         * be figured out automatically
         */
-       mode_t mode;
+       umode_t mode;
 
        /*
         * If non-zero, defines the maximum length of string that can
@@ -456,6 +456,28 @@ int cgroup_is_descendant(const struct cgroup *cgrp, struct task_struct *task);
 void cgroup_exclude_rmdir(struct cgroup_subsys_state *css);
 void cgroup_release_and_wakeup_rmdir(struct cgroup_subsys_state *css);
 
+/*
+ * Control Group taskset, used to pass around set of tasks to cgroup_subsys
+ * methods.
+ */
+struct cgroup_taskset;
+struct task_struct *cgroup_taskset_first(struct cgroup_taskset *tset);
+struct task_struct *cgroup_taskset_next(struct cgroup_taskset *tset);
+struct cgroup *cgroup_taskset_cur_cgroup(struct cgroup_taskset *tset);
+int cgroup_taskset_size(struct cgroup_taskset *tset);
+
+/**
+ * cgroup_taskset_for_each - iterate cgroup_taskset
+ * @task: the loop cursor
+ * @skip_cgrp: skip if task's cgroup matches this, %NULL to iterate through all
+ * @tset: taskset to iterate
+ */
+#define cgroup_taskset_for_each(task, skip_cgrp, tset)                 \
+       for ((task) = cgroup_taskset_first((tset)); (task);             \
+            (task) = cgroup_taskset_next((tset)))                      \
+               if (!(skip_cgrp) ||                                     \
+                   cgroup_taskset_cur_cgroup((tset)) != (skip_cgrp))
+
 /*
  * Control Group subsystem type.
  * See Documentation/cgroups/cgroups.txt for details
@@ -467,14 +489,11 @@ struct cgroup_subsys {
        int (*pre_destroy)(struct cgroup_subsys *ss, struct cgroup *cgrp);
        void (*destroy)(struct cgroup_subsys *ss, struct cgroup *cgrp);
        int (*can_attach)(struct cgroup_subsys *ss, struct cgroup *cgrp,
-                         struct task_struct *tsk);
-       int (*can_attach_task)(struct cgroup *cgrp, struct task_struct *tsk);
+                         struct cgroup_taskset *tset);
        void (*cancel_attach)(struct cgroup_subsys *ss, struct cgroup *cgrp,
-                             struct task_struct *tsk);
-       void (*pre_attach)(struct cgroup *cgrp);
-       void (*attach_task)(struct cgroup *cgrp, struct task_struct *tsk);
+                             struct cgroup_taskset *tset);
        void (*attach)(struct cgroup_subsys *ss, struct cgroup *cgrp,
-                      struct cgroup *old_cgrp, struct task_struct *tsk);
+                      struct cgroup_taskset *tset);
        void (*fork)(struct cgroup_subsys *ss, struct task_struct *task);
        void (*exit)(struct cgroup_subsys *ss, struct cgroup *cgrp,
                        struct cgroup *old_cgrp, struct task_struct *task);