aboutsummaryrefslogtreecommitdiffstats
path: root/kernel
diff options
context:
space:
mode:
authorLi Zefan <lizf@cn.fujitsu.com>2010-03-10 18:22:12 -0500
committerLinus Torvalds <torvalds@linux-foundation.org>2010-03-12 18:52:36 -0500
commitb70cc5fdb445a6929a01e9c406593265b136c99d (patch)
tree7ca8ec384bd93de2ba516f045d9c8c5c77f5b84a /kernel
parent67523c48aa74d5637848edeccf285af1c60bf14a (diff)
cgroups: clean up cgroup_pidlist_find() a bit
Don't call get_pid_ns() before we locate/alloc the ns. Signed-off-by: Li Zefan <lizf@cn.fujitsu.com> Cc: Serge Hallyn <serue@us.ibm.com> Acked-by: Paul Menage <menage@google.com> Cc: KAMEZAWA Hiroyuki <kamezawa.hiroyu@jp.fujitsu.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Diffstat (limited to 'kernel')
-rw-r--r--kernel/cgroup.c8
1 files changed, 3 insertions, 5 deletions
diff --git a/kernel/cgroup.c b/kernel/cgroup.c
index 521591dbab2f..1bf4d6db54ab 100644
--- a/kernel/cgroup.c
+++ b/kernel/cgroup.c
@@ -2597,7 +2597,8 @@ static struct cgroup_pidlist *cgroup_pidlist_find(struct cgroup *cgrp,
2597{ 2597{
2598 struct cgroup_pidlist *l; 2598 struct cgroup_pidlist *l;
2599 /* don't need task_nsproxy() if we're looking at ourself */ 2599 /* don't need task_nsproxy() if we're looking at ourself */
2600 struct pid_namespace *ns = get_pid_ns(current->nsproxy->pid_ns); 2600 struct pid_namespace *ns = current->nsproxy->pid_ns;
2601
2601 /* 2602 /*
2602 * We can't drop the pidlist_mutex before taking the l->mutex in case 2603 * We can't drop the pidlist_mutex before taking the l->mutex in case
2603 * the last ref-holder is trying to remove l from the list at the same 2604 * the last ref-holder is trying to remove l from the list at the same
@@ -2607,8 +2608,6 @@ static struct cgroup_pidlist *cgroup_pidlist_find(struct cgroup *cgrp,
2607 mutex_lock(&cgrp->pidlist_mutex); 2608 mutex_lock(&cgrp->pidlist_mutex);
2608 list_for_each_entry(l, &cgrp->pidlists, links) { 2609 list_for_each_entry(l, &cgrp->pidlists, links) {
2609 if (l->key.type == type && l->key.ns == ns) { 2610 if (l->key.type == type && l->key.ns == ns) {
2610 /* found a matching list - drop the extra refcount */
2611 put_pid_ns(ns);
2612 /* make sure l doesn't vanish out from under us */ 2611 /* make sure l doesn't vanish out from under us */
2613 down_write(&l->mutex); 2612 down_write(&l->mutex);
2614 mutex_unlock(&cgrp->pidlist_mutex); 2613 mutex_unlock(&cgrp->pidlist_mutex);
@@ -2619,13 +2618,12 @@ static struct cgroup_pidlist *cgroup_pidlist_find(struct cgroup *cgrp,
2619 l = kmalloc(sizeof(struct cgroup_pidlist), GFP_KERNEL); 2618 l = kmalloc(sizeof(struct cgroup_pidlist), GFP_KERNEL);
2620 if (!l) { 2619 if (!l) {
2621 mutex_unlock(&cgrp->pidlist_mutex); 2620 mutex_unlock(&cgrp->pidlist_mutex);
2622 put_pid_ns(ns);
2623 return l; 2621 return l;
2624 } 2622 }
2625 init_rwsem(&l->mutex); 2623 init_rwsem(&l->mutex);
2626 down_write(&l->mutex); 2624 down_write(&l->mutex);
2627 l->key.type = type; 2625 l->key.type = type;
2628 l->key.ns = ns; 2626 l->key.ns = get_pid_ns(ns);
2629 l->use_count = 0; /* don't increment here */ 2627 l->use_count = 0; /* don't increment here */
2630 l->list = NULL; 2628 l->list = NULL;
2631 l->owner = cgrp; 2629 l->owner = cgrp;