diff options
Diffstat (limited to 'kernel/pid.c')
| -rw-r--r-- | kernel/pid.c | 12 |
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) */ | ||
| 253 | void 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 | |||
| 255 | struct task_struct * fastcall pid_task(struct pid *pid, enum pid_type type) | 261 | struct 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; |
