On Tue, Aug 23, 2011 at 3:19 PM, Tejun Heo <tj@xxxxxxxxxx> wrote: > ->pre_attach() is supposed to be called before migration, which is > observed during process migration but task migration does it the other > way around. The only ->pre_attach() user is cpuset which can do the > same operaitons in ->can_attach(). Collapse cpuset_pre_attach() into > cpuset_can_attach(). > > Signed-off-by: Tejun Heo <tj@xxxxxxxxxx> Acked-by: Paul Menage <paul@xxxxxxxxxxxxxx> Code looks good, but I think that the some of the Documentation changes slipped in here by mistake. Paul > Cc: Paul Menage <paul@xxxxxxxxxxxxxx> > Cc: Li Zefan <lizf@xxxxxxxxxxxxxx> > --- > Documentation/cgroups/cgroups.txt | 20 -------------------- > kernel/cpuset.c | 29 ++++++++++++----------------- > 2 files changed, 12 insertions(+), 37 deletions(-) > > diff --git a/Documentation/cgroups/cgroups.txt b/Documentation/cgroups/cgroups.txt > index 2eee7cf..afb7cde 100644 > --- a/Documentation/cgroups/cgroups.txt > +++ b/Documentation/cgroups/cgroups.txt > @@ -610,13 +610,6 @@ called on a fork. If this method returns 0 (success) then this should > remain valid while the caller holds cgroup_mutex and it is ensured > that either attach() or cancel_attach() will be called in future. > > -int can_attach_task(struct cgroup *cgrp, struct task_struct *tsk); > -(cgroup_mutex held by caller) > - > -As can_attach, but for operations that must be run once per task to be > -attached (possibly many when using cgroup_attach_proc). Called after > -can_attach. > - > void cancel_attach(struct cgroup_subsys *ss, struct cgroup *cgrp, > struct cgroup_taskset *tset) > (cgroup_mutex held by caller) > @@ -627,12 +620,6 @@ function, so that the subsystem can implement a rollback. If not, not necessary. > This will be called only about subsystems whose can_attach() operation have > succeeded. The parameters are identical to can_attach(). > > -void pre_attach(struct cgroup *cgrp); > -(cgroup_mutex held by caller) > - > -For any non-per-thread attachment work that needs to happen before > -attach_task. Needed by cpuset. > - > void attach(struct cgroup_subsys *ss, struct cgroup *cgrp, > struct cgroup_taskset *tset) > (cgroup_mutex held by caller) > @@ -641,13 +628,6 @@ Called after the task has been attached to the cgroup, to allow any > post-attachment activity that requires memory allocations or blocking. > The parameters are identical to can_attach(). > > -void attach_task(struct cgroup *cgrp, struct task_struct *tsk); > -(cgroup_mutex held by caller) > - > -As attach, but for operations that must be run once per task to be attached, > -like can_attach_task. Called before attach. Currently does not support any > -subsystem that might need the old_cgrp for every thread in the group. > - > void fork(struct cgroup_subsy *ss, struct task_struct *task) > > Called when a task is forked into a cgroup. > diff --git a/kernel/cpuset.c b/kernel/cpuset.c > index 472ddd6..f0b8df3 100644 > --- a/kernel/cpuset.c > +++ b/kernel/cpuset.c > @@ -1367,6 +1367,15 @@ static int fmeter_getrate(struct fmeter *fmp) > return val; > } > > +/* > + * Protected by cgroup_lock. The nodemasks must be stored globally because > + * dynamically allocating them is not allowed in can_attach, and they must > + * persist until attach. > + */ > +static cpumask_var_t cpus_attach; > +static nodemask_t cpuset_attach_nodemask_from; > +static nodemask_t cpuset_attach_nodemask_to; > + > /* Called by cgroups to determine if a cpuset is usable; cgroup_mutex held */ > static int cpuset_can_attach(struct cgroup_subsys *ss, struct cgroup *cgrp, > struct cgroup_taskset *tset) > @@ -1393,29 +1402,16 @@ static int cpuset_can_attach(struct cgroup_subsys *ss, struct cgroup *cgrp, > if ((ret = security_task_setscheduler(task))) > return ret; > } > - return 0; > -} > - > -/* > - * Protected by cgroup_lock. The nodemasks must be stored globally because > - * dynamically allocating them is not allowed in pre_attach, and they must > - * persist among pre_attach, and attach. > - */ > -static cpumask_var_t cpus_attach; > -static nodemask_t cpuset_attach_nodemask_from; > -static nodemask_t cpuset_attach_nodemask_to; > - > -/* Set-up work for before attaching each task. */ > -static void cpuset_pre_attach(struct cgroup *cont) > -{ > - struct cpuset *cs = cgroup_cs(cont); > > + /* prepare for attach */ > if (cs == &top_cpuset) > cpumask_copy(cpus_attach, cpu_possible_mask); > else > guarantee_online_cpus(cs, cpus_attach); > > guarantee_online_mems(cs, &cpuset_attach_nodemask_to); > + > + return 0; > } > > static void cpuset_attach(struct cgroup_subsys *ss, struct cgroup *cgrp, > @@ -1901,7 +1897,6 @@ struct cgroup_subsys cpuset_subsys = { > .create = cpuset_create, > .destroy = cpuset_destroy, > .can_attach = cpuset_can_attach, > - .pre_attach = cpuset_pre_attach, > .attach = cpuset_attach, > .populate = cpuset_populate, > .post_clone = cpuset_post_clone, > -- > 1.7.6 > > _______________________________________________ linux-pm mailing list linux-pm@xxxxxxxxxxxxxxxxxxxxxxxxxx https://lists.linux-foundation.org/mailman/listinfo/linux-pm