diff options
author | Eric W. Biederman <ebiederm@xmission.com> | 2010-03-02 17:51:53 -0500 |
---|---|---|
committer | Eric W. Biederman <ebiederm@xmission.com> | 2012-11-19 08:59:09 -0500 |
commit | 17cf22c33e1f1b5e435469c84e43872579497653 (patch) | |
tree | c5cec307c06f7e4ddc26e04e73c8833897b67113 | |
parent | 49f4d8b93ccf9454284b6f524b96c66d8d7fbccc (diff) |
pidns: Use task_active_pid_ns where appropriate
The expressions tsk->nsproxy->pid_ns and task_active_pid_ns
aka ns_of_pid(task_pid(tsk)) should have the same number of
cache line misses with the practical difference that
ns_of_pid(task_pid(tsk)) is released later in a processes life.
Furthermore by using task_active_pid_ns it becomes trivial
to write an unshare implementation for the the pid namespace.
So I have used task_active_pid_ns everywhere I can.
In fork since the pid has not yet been attached to the
process I use ns_of_pid, to achieve the same effect.
Signed-off-by: Eric W. Biederman <ebiederm@xmission.com>
-rw-r--r-- | arch/powerpc/platforms/cell/spufs/sched.c | 2 | ||||
-rw-r--r-- | arch/um/drivers/mconsole_kern.c | 2 | ||||
-rw-r--r-- | drivers/staging/android/binder.c | 3 | ||||
-rw-r--r-- | fs/hppfs/hppfs.c | 2 | ||||
-rw-r--r-- | fs/proc/root.c | 2 | ||||
-rw-r--r-- | kernel/cgroup.c | 2 | ||||
-rw-r--r-- | kernel/events/core.c | 2 | ||||
-rw-r--r-- | kernel/fork.c | 2 | ||||
-rw-r--r-- | kernel/nsproxy.c | 2 | ||||
-rw-r--r-- | kernel/pid.c | 8 | ||||
-rw-r--r-- | kernel/signal.c | 2 | ||||
-rw-r--r-- | kernel/sysctl_binary.c | 2 |
12 files changed, 16 insertions, 15 deletions
diff --git a/arch/powerpc/platforms/cell/spufs/sched.c b/arch/powerpc/platforms/cell/spufs/sched.c index 965d381abd75..25db92a8e1cf 100644 --- a/arch/powerpc/platforms/cell/spufs/sched.c +++ b/arch/powerpc/platforms/cell/spufs/sched.c | |||
@@ -1094,7 +1094,7 @@ static int show_spu_loadavg(struct seq_file *s, void *private) | |||
1094 | LOAD_INT(c), LOAD_FRAC(c), | 1094 | LOAD_INT(c), LOAD_FRAC(c), |
1095 | count_active_contexts(), | 1095 | count_active_contexts(), |
1096 | atomic_read(&nr_spu_contexts), | 1096 | atomic_read(&nr_spu_contexts), |
1097 | current->nsproxy->pid_ns->last_pid); | 1097 | task_active_pid_ns(current)->last_pid); |
1098 | return 0; | 1098 | return 0; |
1099 | } | 1099 | } |
1100 | 1100 | ||
diff --git a/arch/um/drivers/mconsole_kern.c b/arch/um/drivers/mconsole_kern.c index 79ccfe6c7078..7fc71c628267 100644 --- a/arch/um/drivers/mconsole_kern.c +++ b/arch/um/drivers/mconsole_kern.c | |||
@@ -123,7 +123,7 @@ void mconsole_log(struct mc_request *req) | |||
123 | 123 | ||
124 | void mconsole_proc(struct mc_request *req) | 124 | void mconsole_proc(struct mc_request *req) |
125 | { | 125 | { |
126 | struct vfsmount *mnt = current->nsproxy->pid_ns->proc_mnt; | 126 | struct vfsmount *mnt = task_active_pid_ns(current)->proc_mnt; |
127 | char *buf; | 127 | char *buf; |
128 | int len; | 128 | int len; |
129 | struct file *file; | 129 | struct file *file; |
diff --git a/drivers/staging/android/binder.c b/drivers/staging/android/binder.c index 5d4610babd8a..a97bbcd1c9ea 100644 --- a/drivers/staging/android/binder.c +++ b/drivers/staging/android/binder.c | |||
@@ -33,6 +33,7 @@ | |||
33 | #include <linux/uaccess.h> | 33 | #include <linux/uaccess.h> |
34 | #include <linux/vmalloc.h> | 34 | #include <linux/vmalloc.h> |
35 | #include <linux/slab.h> | 35 | #include <linux/slab.h> |
36 | #include <linux/pid_namespace.h> | ||
36 | 37 | ||
37 | #include "binder.h" | 38 | #include "binder.h" |
38 | 39 | ||
@@ -2344,7 +2345,7 @@ retry: | |||
2344 | if (t->from) { | 2345 | if (t->from) { |
2345 | struct task_struct *sender = t->from->proc->tsk; | 2346 | struct task_struct *sender = t->from->proc->tsk; |
2346 | tr.sender_pid = task_tgid_nr_ns(sender, | 2347 | tr.sender_pid = task_tgid_nr_ns(sender, |
2347 | current->nsproxy->pid_ns); | 2348 | task_active_pid_ns(current)); |
2348 | } else { | 2349 | } else { |
2349 | tr.sender_pid = 0; | 2350 | tr.sender_pid = 0; |
2350 | } | 2351 | } |
diff --git a/fs/hppfs/hppfs.c b/fs/hppfs/hppfs.c index 78f21f8dc2ec..43b315f2002b 100644 --- a/fs/hppfs/hppfs.c +++ b/fs/hppfs/hppfs.c | |||
@@ -710,7 +710,7 @@ static int hppfs_fill_super(struct super_block *sb, void *d, int silent) | |||
710 | struct vfsmount *proc_mnt; | 710 | struct vfsmount *proc_mnt; |
711 | int err = -ENOENT; | 711 | int err = -ENOENT; |
712 | 712 | ||
713 | proc_mnt = mntget(current->nsproxy->pid_ns->proc_mnt); | 713 | proc_mnt = mntget(task_active_pid_ns(current)->proc_mnt); |
714 | if (IS_ERR(proc_mnt)) | 714 | if (IS_ERR(proc_mnt)) |
715 | goto out; | 715 | goto out; |
716 | 716 | ||
diff --git a/fs/proc/root.c b/fs/proc/root.c index 13ef6247e7a3..fc1609321a78 100644 --- a/fs/proc/root.c +++ b/fs/proc/root.c | |||
@@ -106,7 +106,7 @@ static struct dentry *proc_mount(struct file_system_type *fs_type, | |||
106 | ns = (struct pid_namespace *)data; | 106 | ns = (struct pid_namespace *)data; |
107 | options = NULL; | 107 | options = NULL; |
108 | } else { | 108 | } else { |
109 | ns = current->nsproxy->pid_ns; | 109 | ns = task_active_pid_ns(current); |
110 | options = data; | 110 | options = data; |
111 | } | 111 | } |
112 | 112 | ||
diff --git a/kernel/cgroup.c b/kernel/cgroup.c index f24f724620dd..0dbfba2efa77 100644 --- a/kernel/cgroup.c +++ b/kernel/cgroup.c | |||
@@ -3390,7 +3390,7 @@ static struct cgroup_pidlist *cgroup_pidlist_find(struct cgroup *cgrp, | |||
3390 | { | 3390 | { |
3391 | struct cgroup_pidlist *l; | 3391 | struct cgroup_pidlist *l; |
3392 | /* don't need task_nsproxy() if we're looking at ourself */ | 3392 | /* don't need task_nsproxy() if we're looking at ourself */ |
3393 | struct pid_namespace *ns = current->nsproxy->pid_ns; | 3393 | struct pid_namespace *ns = task_active_pid_ns(current); |
3394 | 3394 | ||
3395 | /* | 3395 | /* |
3396 | * We can't drop the pidlist_mutex before taking the l->mutex in case | 3396 | * We can't drop the pidlist_mutex before taking the l->mutex in case |
diff --git a/kernel/events/core.c b/kernel/events/core.c index dbccf83c134d..738f3564e83b 100644 --- a/kernel/events/core.c +++ b/kernel/events/core.c | |||
@@ -6155,7 +6155,7 @@ perf_event_alloc(struct perf_event_attr *attr, int cpu, | |||
6155 | 6155 | ||
6156 | event->parent = parent_event; | 6156 | event->parent = parent_event; |
6157 | 6157 | ||
6158 | event->ns = get_pid_ns(current->nsproxy->pid_ns); | 6158 | event->ns = get_pid_ns(task_active_pid_ns(current)); |
6159 | event->id = atomic64_inc_return(&perf_event_id); | 6159 | event->id = atomic64_inc_return(&perf_event_id); |
6160 | 6160 | ||
6161 | event->state = PERF_EVENT_STATE_INACTIVE; | 6161 | event->state = PERF_EVENT_STATE_INACTIVE; |
diff --git a/kernel/fork.c b/kernel/fork.c index 8b20ab7d3aa2..7798c247f4b9 100644 --- a/kernel/fork.c +++ b/kernel/fork.c | |||
@@ -1442,7 +1442,7 @@ static struct task_struct *copy_process(unsigned long clone_flags, | |||
1442 | 1442 | ||
1443 | if (thread_group_leader(p)) { | 1443 | if (thread_group_leader(p)) { |
1444 | if (is_child_reaper(pid)) | 1444 | if (is_child_reaper(pid)) |
1445 | p->nsproxy->pid_ns->child_reaper = p; | 1445 | ns_of_pid(pid)->child_reaper = p; |
1446 | 1446 | ||
1447 | p->signal->leader_pid = pid; | 1447 | p->signal->leader_pid = pid; |
1448 | p->signal->tty = tty_kref_get(current->signal->tty); | 1448 | p->signal->tty = tty_kref_get(current->signal->tty); |
diff --git a/kernel/nsproxy.c b/kernel/nsproxy.c index ca27d2c5264d..acc92680381a 100644 --- a/kernel/nsproxy.c +++ b/kernel/nsproxy.c | |||
@@ -84,7 +84,7 @@ static struct nsproxy *create_new_namespaces(unsigned long flags, | |||
84 | goto out_ipc; | 84 | goto out_ipc; |
85 | } | 85 | } |
86 | 86 | ||
87 | new_nsp->pid_ns = copy_pid_ns(flags, task_cred_xxx(tsk, user_ns), task_active_pid_ns(tsk)); | 87 | new_nsp->pid_ns = copy_pid_ns(flags, task_cred_xxx(tsk, user_ns), tsk->nsproxy->pid_ns); |
88 | if (IS_ERR(new_nsp->pid_ns)) { | 88 | if (IS_ERR(new_nsp->pid_ns)) { |
89 | err = PTR_ERR(new_nsp->pid_ns); | 89 | err = PTR_ERR(new_nsp->pid_ns); |
90 | goto out_pid; | 90 | goto out_pid; |
diff --git a/kernel/pid.c b/kernel/pid.c index 2a624f1486e1..3a5f238c1ca0 100644 --- a/kernel/pid.c +++ b/kernel/pid.c | |||
@@ -345,7 +345,7 @@ EXPORT_SYMBOL_GPL(find_pid_ns); | |||
345 | 345 | ||
346 | struct pid *find_vpid(int nr) | 346 | struct pid *find_vpid(int nr) |
347 | { | 347 | { |
348 | return find_pid_ns(nr, current->nsproxy->pid_ns); | 348 | return find_pid_ns(nr, task_active_pid_ns(current)); |
349 | } | 349 | } |
350 | EXPORT_SYMBOL_GPL(find_vpid); | 350 | EXPORT_SYMBOL_GPL(find_vpid); |
351 | 351 | ||
@@ -429,7 +429,7 @@ struct task_struct *find_task_by_pid_ns(pid_t nr, struct pid_namespace *ns) | |||
429 | 429 | ||
430 | struct task_struct *find_task_by_vpid(pid_t vnr) | 430 | struct task_struct *find_task_by_vpid(pid_t vnr) |
431 | { | 431 | { |
432 | return find_task_by_pid_ns(vnr, current->nsproxy->pid_ns); | 432 | return find_task_by_pid_ns(vnr, task_active_pid_ns(current)); |
433 | } | 433 | } |
434 | 434 | ||
435 | struct pid *get_task_pid(struct task_struct *task, enum pid_type type) | 435 | struct pid *get_task_pid(struct task_struct *task, enum pid_type type) |
@@ -484,7 +484,7 @@ EXPORT_SYMBOL_GPL(pid_nr_ns); | |||
484 | 484 | ||
485 | pid_t pid_vnr(struct pid *pid) | 485 | pid_t pid_vnr(struct pid *pid) |
486 | { | 486 | { |
487 | return pid_nr_ns(pid, current->nsproxy->pid_ns); | 487 | return pid_nr_ns(pid, task_active_pid_ns(current)); |
488 | } | 488 | } |
489 | EXPORT_SYMBOL_GPL(pid_vnr); | 489 | EXPORT_SYMBOL_GPL(pid_vnr); |
490 | 490 | ||
@@ -495,7 +495,7 @@ pid_t __task_pid_nr_ns(struct task_struct *task, enum pid_type type, | |||
495 | 495 | ||
496 | rcu_read_lock(); | 496 | rcu_read_lock(); |
497 | if (!ns) | 497 | if (!ns) |
498 | ns = current->nsproxy->pid_ns; | 498 | ns = task_active_pid_ns(current); |
499 | if (likely(pid_alive(task))) { | 499 | if (likely(pid_alive(task))) { |
500 | if (type != PIDTYPE_PID) | 500 | if (type != PIDTYPE_PID) |
501 | task = task->group_leader; | 501 | task = task->group_leader; |
diff --git a/kernel/signal.c b/kernel/signal.c index 0af8868525d6..b2445d86f226 100644 --- a/kernel/signal.c +++ b/kernel/signal.c | |||
@@ -1752,7 +1752,7 @@ static void do_notify_parent_cldstop(struct task_struct *tsk, | |||
1752 | * see comment in do_notify_parent() about the following 4 lines | 1752 | * see comment in do_notify_parent() about the following 4 lines |
1753 | */ | 1753 | */ |
1754 | rcu_read_lock(); | 1754 | rcu_read_lock(); |
1755 | info.si_pid = task_pid_nr_ns(tsk, parent->nsproxy->pid_ns); | 1755 | info.si_pid = task_pid_nr_ns(tsk, task_active_pid_ns(parent)); |
1756 | info.si_uid = from_kuid_munged(task_cred_xxx(parent, user_ns), task_uid(tsk)); | 1756 | info.si_uid = from_kuid_munged(task_cred_xxx(parent, user_ns), task_uid(tsk)); |
1757 | rcu_read_unlock(); | 1757 | rcu_read_unlock(); |
1758 | 1758 | ||
diff --git a/kernel/sysctl_binary.c b/kernel/sysctl_binary.c index 65bdcf198d4e..5a6384450501 100644 --- a/kernel/sysctl_binary.c +++ b/kernel/sysctl_binary.c | |||
@@ -1344,7 +1344,7 @@ static ssize_t binary_sysctl(const int *name, int nlen, | |||
1344 | goto out_putname; | 1344 | goto out_putname; |
1345 | } | 1345 | } |
1346 | 1346 | ||
1347 | mnt = current->nsproxy->pid_ns->proc_mnt; | 1347 | mnt = task_active_pid_ns(current)->proc_mnt; |
1348 | file = file_open_root(mnt->mnt_root, mnt, pathname, flags); | 1348 | file = file_open_root(mnt->mnt_root, mnt, pathname, flags); |
1349 | result = PTR_ERR(file); | 1349 | result = PTR_ERR(file); |
1350 | if (IS_ERR(file)) | 1350 | if (IS_ERR(file)) |