[Devel] Re: [v12][PATCH 7/9] Define do_fork_with_pids()

Sukadev Bhattiprolu sukadev at linux.vnet.ibm.com
Wed Nov 11 14:40:34 PST 2009


cc: lkml

Sukadev Bhattiprolu [sukadev at linux.vnet.ibm.com] wrote:
| 
| Subject: [v12][PATCH 7/9] Define do_fork_with_pids()
| 
| do_fork_with_pids() is same as do_fork(), except that it takes an
| additional, 'pid_set', parameter. This parameter, currently unused,
| specifies the set of target pids of the process in each of its pid
| namespaces.
| 
| Changelog[v7]:
| 	- Drop 'struct pid_set' object and pass in 'pid_t *target_pids'
| 	  instead of 'struct pid_set *'.
| 
| Changelog[v6]:
| 	- (Nathan Lynch, Arnd Bergmann, H. Peter Anvin, Linus Torvalds)
| 	  Change 'pid_set.pids' to a 'pid_t pids[]' so size of 'struct pid_set'
| 	  is constant across architectures.
| 	- (Nathan Lynch) Change 'pid_set.num_pids' to 'unsigned int'.
| 
| Changelog[v4]:
| 	- Rename 'struct target_pid_set' to 'struct pid_set' since it may
| 	  be useful in other contexts.
| 
| Changelog[v3]:
| 	- Fix "long-line" warning from checkpatch.pl
| 
| Changelog[v2]:
| 	- To facilitate moving architecture-inpdendent code to kernel/fork.c
| 	  pass in 'struct target_pid_set __user *' to do_fork_with_pids()
| 	  rather than 'pid_t *' (next patch moves the arch-independent
| 	  code to kernel/fork.c)
| 
| Signed-off-by: Sukadev Bhattiprolu <sukadev at linux.vnet.ibm.com>
| Acked-by: Serge Hallyn <serue at us.ibm.com>
| Reviewed-by: Oren Laadan <orenl at cs.columbia.edu>
| ---
|  include/linux/sched.h |    3 +++
|  kernel/fork.c         |   17 +++++++++++++++--
|  2 files changed, 18 insertions(+), 2 deletions(-)
| 
| diff --git a/include/linux/sched.h b/include/linux/sched.h
| index a4d2c23..85e971a 100644
| --- a/include/linux/sched.h
| +++ b/include/linux/sched.h
| @@ -2153,6 +2153,9 @@ extern int disallow_signal(int);
| 
|  extern int do_execve(char *, char __user * __user *, char __user * __user *, struct pt_regs *);
|  extern long do_fork(unsigned long, unsigned long, struct pt_regs *, unsigned long, int __user *, int __user *);
| +extern long do_fork_with_pids(unsigned long, unsigned long, struct pt_regs *,
| +				unsigned long, int __user *, int __user *,
| +				unsigned int, pid_t __user *);
|  struct task_struct *fork_idle(int);
| 
|  extern void set_task_comm(struct task_struct *tsk, char *from);
| diff --git a/kernel/fork.c b/kernel/fork.c
| index 11f77ed..210e841 100644
| --- a/kernel/fork.c
| +++ b/kernel/fork.c
| @@ -1377,12 +1377,14 @@ struct task_struct * __cpuinit fork_idle(int cpu)
|   * It copies the process, and if successful kick-starts
|   * it and waits for it to finish using the VM if required.
|   */
| -long do_fork(unsigned long clone_flags,
| +long do_fork_with_pids(unsigned long clone_flags,
|  	      unsigned long stack_start,
|  	      struct pt_regs *regs,
|  	      unsigned long stack_size,
|  	      int __user *parent_tidptr,
| -	      int __user *child_tidptr)
| +	      int __user *child_tidptr,
| +	      unsigned int num_pids,
| +	      pid_t __user *upids)
|  {
|  	struct task_struct *p;
|  	int trace = 0;
| @@ -1485,6 +1487,17 @@ long do_fork(unsigned long clone_flags,
|  	return nr;
|  }
| 
| +long do_fork(unsigned long clone_flags,
| +	      unsigned long stack_start,
| +	      struct pt_regs *regs,
| +	      unsigned long stack_size,
| +	      int __user *parent_tidptr,
| +	      int __user *child_tidptr)
| +{
| +	return do_fork_with_pids(clone_flags, stack_start, regs, stack_size,
| +			parent_tidptr, child_tidptr, 0, NULL);
| +}
| +
|  #ifndef ARCH_MIN_MMSTRUCT_ALIGN
|  #define ARCH_MIN_MMSTRUCT_ALIGN 0
|  #endif
| -- 
| 1.6.0.4
| 
| _______________________________________________
| Containers mailing list
| Containers at lists.linux-foundation.org
| https://lists.linux-foundation.org/mailman/listinfo/containers
_______________________________________________
Containers mailing list
Containers at lists.linux-foundation.org
https://lists.linux-foundation.org/mailman/listinfo/containers




More information about the Devel mailing list