Use struct pid parameter in copy_process()
Subsystems (3)
PATCH 3/5 Use struct pid parameter in copy_process()
From: Sukadev Bhattiprolu <[email protected]>
Subject: [PATCH 3/5] Use struct pid parameter in copy_process()
Modify copy_process() to take a struct pid * parameter instead of a pid_t. This simplifies the code a bit and also avoids having to call find_pid() to convert the pid_t to a struct pid.
Changelog:
- Fixed Badari Pulavarty's comments and passed in &init_struct_pid from fork_idle().
- Fixed Eric Biederman's comments and simplified this patch and used a new patch to remove the likely(pid) check.
Signed-off-by Sukadev Bhattiprolu <[email protected]>
Cc Cedric Le Goater <[email protected]>
Cc Dave Hansen <[email protected]>
Cc Serge Hallyn <[email protected]>
Cc Eric Biederman <[email protected]>
--- kernel/fork.c | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-)
kernel/fork.c +6 -5
@@ -966,7 +966,7 @@ static struct task_struct *copy_process(unsigned long stack_size, int __user *parent_tidptr, int __user *child_tidptr, - int pid) + struct pid *pid) { int retval;struct task_struct *p =NULL ;
@@ -1033,7 +1033,7 @@ static struct task_struct *copy_process( p->did_exec =0 ;delayacct_tsk_init (p);/* Must remain after dup_task_struct() */ copy_flags (clone_flags, p); - p->pid = pid; + p->pid =pid_nr (pid);INIT_LIST_HEAD (&p->children);INIT_LIST_HEAD (&p->sibling);
@@ -1265,7 +1265,7 @@ static struct task_struct *copy_process(list_add_tail_rcu (&p->tasks, &init_task.tasks);__get_cpu_var (process_counts)++; } -attach_pid (p,PIDTYPE_PID ,find_pid (p->pid)); +attach_pid (p,PIDTYPE_PID , pid); nr_threads++; }
@@ -1336,7 +1336,8 @@ struct task_struct * __cpuinit fork_idlestruct task_struct *task;struct pt_regs regs; - task =copy_process (CLONE_VM ,0 ,idle_regs (®s),0 ,NULL ,NULL ,0 ); + task =copy_process (CLONE_VM ,0 ,idle_regs (®s),0 ,NULL ,NULL , + &init_struct_pid);if (!IS_ERR (task))init_idle (task, cpu);
@@ -1364,7 +1365,7 @@ long do_fork(unsigned long clone_flags,return -EAGAIN ; nr = pid->nr; - p =copy_process (clone_flags, stack_start, regs, stack_size, parent_tidptr, child_tidptr, nr); + p =copy_process (clone_flags, stack_start, regs, stack_size, parent_tidptr, child_tidptr, pid);/* * Do this prior waking up the new thread - the thread pointer * might get invalid after that point, if the thread exits quickly.