Messages in this thread | ![/](/images/icornerl.gif) | | Date | Thu, 22 Dec 2011 13:50:46 +0800 | From | Li Zefan <> | Subject | Re: [PATCH 4/4] cgroup: remove extra calls to find_existing_css_set |
| |
> @@ -2091,6 +2010,10 @@ int cgroup_attach_proc(struct cgroup *cgrp, struct task_struct *leader) > * rcu or tasklist locked. instead, build an array of all threads in the > * group - group_rwsem prevents new threads from appearing, and if > * threads exit, this will just be an over-estimate. > + * > + * While creating the list, also make sure css_sets exist for all > + * threads to be migrated. we use find_css_set, which allocates a new > + * one if necessary. > */ > group_size = get_nr_threads(leader); > /* flex_array supports very large thread-groups better than kmalloc. */ > @@ -2137,6 +2060,12 @@ int cgroup_attach_proc(struct cgroup *cgrp, struct task_struct *leader) > /* nothing to do if this task is already in the cgroup */ > if (ent.cgrp == cgrp) > continue; > + ent.cg = find_css_set(tsk->cgroups, cgrp);
unfortunately This won't work, because we are holding tasklist_lock.
> + if (!ent.cg) { > + retval = -ENOMEM; > + group_size = i; > + goto out_list_teardown; > + } > retval = flex_array_put(group, i, &ent, GFP_ATOMIC); > BUG_ON(retval != 0); > i++;
| ![\](/images/icornerr.gif) |