aboutsummaryrefslogtreecommitdiffstats
path: root/kernel/pid.c
diff options
context:
space:
mode:
Diffstat (limited to 'kernel/pid.c')
-rw-r--r--kernel/pid.c12
1 files changed, 9 insertions, 3 deletions
diff --git a/kernel/pid.c b/kernel/pid.c
index 93e212f20671..8387e8c68193 100644
--- a/kernel/pid.c
+++ b/kernel/pid.c
@@ -223,9 +223,6 @@ int fastcall attach_pid(struct task_struct *task, enum pid_type type, int nr)
223 struct pid_link *link; 223 struct pid_link *link;
224 struct pid *pid; 224 struct pid *pid;
225 225
226 WARN_ON(!task->pid); /* to be removed soon */
227 WARN_ON(!nr); /* to be removed soon */
228
229 link = &task->pids[type]; 226 link = &task->pids[type];
230 link->pid = pid = find_pid(nr); 227 link->pid = pid = find_pid(nr);
231 hlist_add_head_rcu(&link->node, &pid->tasks[type]); 228 hlist_add_head_rcu(&link->node, &pid->tasks[type]);
@@ -252,6 +249,15 @@ void fastcall detach_pid(struct task_struct *task, enum pid_type type)
252 free_pid(pid); 249 free_pid(pid);
253} 250}
254 251
252/* transfer_pid is an optimization of attach_pid(new), detach_pid(old) */
253void fastcall transfer_pid(struct task_struct *old, struct task_struct *new,
254 enum pid_type type)
255{
256 new->pids[type].pid = old->pids[type].pid;
257 hlist_replace_rcu(&old->pids[type].node, &new->pids[type].node);
258 old->pids[type].pid = NULL;
259}
260
255struct task_struct * fastcall pid_task(struct pid *pid, enum pid_type type) 261struct task_struct * fastcall pid_task(struct pid *pid, enum pid_type type)
256{ 262{
257 struct task_struct *result = NULL; 263 struct task_struct *result = NULL;