Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 95250
b: refs/heads/master
c: 24336ea
h: refs/heads/master
v: v3
  • Loading branch information
Oleg Nesterov authored and Linus Torvalds committed Apr 30, 2008
1 parent dae035a commit ebdc2af
Show file tree
Hide file tree
Showing 3 changed files with 21 additions and 8 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 65450cebc6a2efde80ed45514f727e6e4dc1eafd
refs/heads/master: 24336eaeecea860b2a82530e07c80bc7e0558b73
6 changes: 4 additions & 2 deletions trunk/include/linux/pid.h
Original file line number Diff line number Diff line change
Expand Up @@ -89,9 +89,11 @@ extern struct pid *get_task_pid(struct task_struct *task, enum pid_type type);
* attach_pid() and detach_pid() must be called with the tasklist_lock
* write-held.
*/
extern int attach_pid(struct task_struct *task, enum pid_type type,
struct pid *pid);
extern void attach_pid(struct task_struct *task, enum pid_type type,
struct pid *pid);
extern void detach_pid(struct task_struct *task, enum pid_type);
extern void change_pid(struct task_struct *task, enum pid_type,
struct pid *pid);
extern void transfer_pid(struct task_struct *old, struct task_struct *new,
enum pid_type);

Expand Down
21 changes: 16 additions & 5 deletions trunk/kernel/pid.c
Original file line number Diff line number Diff line change
Expand Up @@ -317,19 +317,18 @@ EXPORT_SYMBOL_GPL(find_pid);
/*
* attach_pid() must be called with the tasklist_lock write-held.
*/
int attach_pid(struct task_struct *task, enum pid_type type,
void attach_pid(struct task_struct *task, enum pid_type type,
struct pid *pid)
{
struct pid_link *link;

link = &task->pids[type];
link->pid = pid;
hlist_add_head_rcu(&link->node, &pid->tasks[type]);

return 0;
}

void detach_pid(struct task_struct *task, enum pid_type type)
static void __change_pid(struct task_struct *task, enum pid_type type,
struct pid *new)
{
struct pid_link *link;
struct pid *pid;
Expand All @@ -339,7 +338,7 @@ void detach_pid(struct task_struct *task, enum pid_type type)
pid = link->pid;

hlist_del_rcu(&link->node);
link->pid = NULL;
link->pid = new;

for (tmp = PIDTYPE_MAX; --tmp >= 0; )
if (!hlist_empty(&pid->tasks[tmp]))
Expand All @@ -348,6 +347,18 @@ void detach_pid(struct task_struct *task, enum pid_type type)
free_pid(pid);
}

void detach_pid(struct task_struct *task, enum pid_type type)
{
__change_pid(task, type, NULL);
}

void change_pid(struct task_struct *task, enum pid_type type,
struct pid *pid)
{
__change_pid(task, type, pid);
attach_pid(task, type, pid);
}

/* transfer_pid is an optimization of attach_pid(new), detach_pid(old) */
void transfer_pid(struct task_struct *old, struct task_struct *new,
enum pid_type type)
Expand Down

0 comments on commit ebdc2af

Please sign in to comment.