[Devel] [PATCH 2/6] Rename pid_nr function

Pavel Emelianov xemul at openvz.org
Thu Jul 12 23:23:06 PDT 2007


sukadev at us.ibm.com wrote:
> Pavel Emelianov [xemul at openvz.org] wrote:
> | sukadev at us.ibm.com wrote:
> | > Subject: [PATCH 2/6] Rename pid_nr function 
> | > 
> | > From: Sukadev Bhattiprolu <sukadev at us.ibm.com>
> | > 
> | > Rename pid_nr() function to pid_to_nr() which is more descriptive
> | > and will hopefully cause less confusion with new structure/functions
> | > being added to support multiple pid namespaces.
> | 
> | Don't we need at least two convertors:
> | pid_to_nr_as_it_seen_by_current()
> | and
> | pid_to_nr_as_it_seen_by_some_other_task()
> 
> Can you give me an example of where you would use this latter
> (pid_to_nr_as_it_seen_by_some_other_task()) interface ?

Easy. Consider you're observing /proc/<pid>/status file for a task
that lives in two namespaces - init and some created. When making 
"cat" on this from init namespace you must get the task's pid as it
is seen from init namespace, but when making "cat" from the created
namespace you must see the pid as it is seen by this namespace. And 
so on and so forth.

On the other hand sys_getpid() should simply return the virtual pid
without messing with namespaces.

> I have a similar confusion with following two sets of interfaces
> in your patchset and have been meaning to discuss it further.
> 
> 	pid_nr() and pid_vnr()
> 	find_pid() and find_vpid()
> 
> I can understand the use of pid_vnr() and find_vpid().
> 
> Where do you see us using pid_nr() and find_pid() - i.e the values
> as seen in init_pid_ns ? 

find_pid() may be used in keventd_create_thread() as eventd thread
lives in init namespace only. Any other place in kernel that is
somehow "global" to all the namespaces and has no user interface
must use global pids not to confuse the kernel.

Of course, if we plan to replace the notion of global numerical pid
with struct pid this is not an option. However, the issues with the
pid_to_nr_as_it_... are still valid.

> Like I pointed out in another thread, sunos_killpg() for instance
> needs to used find_vpid(). Similarly, kill_proc_info(),
> __set_special_pids() etc need find_vpid().

Sure. These places are to be patched as well.

> Thanks,
> 
> Suka
> 
> 
> | 
> | The first one is essentially the second one with "some other
> | task" being current, but it can be optimized...
> | 
> | > Signed-off-by: Sukadev Bhattiprolu <sukadev at us.ibm.com>
> | > ---
> | >  drivers/char/n_r3964.c |    7 ++++---
> | >  drivers/char/tty_io.c  |    4 ++--
> | >  fs/autofs/root.c       |    2 +-
> | >  fs/fcntl.c             |    2 +-
> | >  fs/proc/array.c        |    2 +-
> | >  fs/smbfs/proc.c        |    2 +-
> | >  include/linux/pid.h    |    2 +-
> | >  ipc/mqueue.c           |    2 +-
> | >  kernel/container.c     |    2 +-
> | >  kernel/fork.c          |    2 +-
> | >  kernel/sysctl.c        |    2 +-
> | >  11 files changed, 15 insertions(+), 14 deletions(-)
> | > 
> | > Index: lx26-22-rc6-mm1/include/linux/pid.h
> | > ===================================================================
> | > --- lx26-22-rc6-mm1.orig/include/linux/pid.h	2007-07-05 18:53:43.000000000 -0700
> | > +++ lx26-22-rc6-mm1/include/linux/pid.h	2007-07-05 18:54:29.000000000 -0700
> | > @@ -98,7 +98,7 @@ extern struct pid *find_ge_pid(int nr);
> | >  extern struct pid *alloc_pid(void);
> | >  extern void FASTCALL(free_pid(struct pid *pid));
> | >  
> | > -static inline pid_t pid_nr(struct pid *pid)
> | > +static inline pid_t pid_to_nr(struct pid *pid)
> | >  {
> | >  	pid_t nr = 0;
> | >  	if (pid)
> | > Index: lx26-22-rc6-mm1/drivers/char/n_r3964.c
> | > ===================================================================
> | > --- lx26-22-rc6-mm1.orig/drivers/char/n_r3964.c	2007-07-05 18:53:43.000000000 -0700
> | > +++ lx26-22-rc6-mm1/drivers/char/n_r3964.c	2007-07-05 18:54:29.000000000 -0700
> | > @@ -771,7 +771,7 @@ static int enable_signals(struct r3964_i
> | >  
> | >  			if (pClient->pid == pid) {
> | >  				TRACE_PS("removing client %d from client list",
> | > -					 pid_nr(pid));
> | > +					 pid_to_nr(pid));
> | >  				*ppClient = pClient->next;
> | >  				while (pClient->msg_count) {
> | >  					pMsg = remove_msg(pInfo, pClient);
> | > @@ -801,7 +801,8 @@ static int enable_signals(struct r3964_i
> | >  			if (pClient == NULL)
> | >  				return -ENOMEM;
> | >  
> | > -			TRACE_PS("add client %d to client list", pid_nr(pid));
> | > +			TRACE_PS("add client %d to client list",
> | > +					pid_to_nr(pid));
> | >  			spin_lock_init(&pClient->lock);
> | >  			pClient->sig_flags = arg;
> | >  			pClient->pid = get_pid(pid);
> | > @@ -933,7 +934,7 @@ static void remove_client_block(struct r
> | >  {
> | >  	struct r3964_block_header *block;
> | >  
> | > -	TRACE_PS("remove_client_block PID %d", pid_nr(pClient->pid));
> | > +	TRACE_PS("remove_client_block PID %d", pid_to_nr(pClient->pid));
> | >  
> | >  	block = pClient->next_block_to_read;
> | >  	if (block) {
> | > Index: lx26-22-rc6-mm1/drivers/char/tty_io.c
> | > ===================================================================
> | > --- lx26-22-rc6-mm1.orig/drivers/char/tty_io.c	2007-07-05 18:53:43.000000000 -0700
> | > +++ lx26-22-rc6-mm1/drivers/char/tty_io.c	2007-07-05 18:54:29.000000000 -0700
> | > @@ -3080,7 +3080,7 @@ static int tiocgpgrp(struct tty_struct *
> | >  	 */
> | >  	if (tty == real_tty && current->signal->tty != real_tty)
> | >  		return -ENOTTY;
> | > -	return put_user(pid_nr(real_tty->pgrp), p);
> | > +	return put_user(pid_to_nr(real_tty->pgrp), p);
> | >  }
> | >  
> | >  /**
> | > @@ -3151,7 +3151,7 @@ static int tiocgsid(struct tty_struct *t
> | >  		return -ENOTTY;
> | >  	if (!real_tty->session)
> | >  		return -ENOTTY;
> | > -	return put_user(pid_nr(real_tty->session), p);
> | > +	return put_user(pid_to_nr(real_tty->session), p);
> | >  }
> | >  
> | >  /**
> | > Index: lx26-22-rc6-mm1/fs/autofs/root.c
> | > ===================================================================
> | > --- lx26-22-rc6-mm1.orig/fs/autofs/root.c	2007-07-05 18:53:43.000000000 -0700
> | > +++ lx26-22-rc6-mm1/fs/autofs/root.c	2007-07-05 18:54:29.000000000 -0700
> | > @@ -214,7 +214,7 @@ static struct dentry *autofs_root_lookup
> | >  
> | >  	oz_mode = autofs_oz_mode(sbi);
> | >  	DPRINTK(("autofs_lookup: pid = %u, pgrp = %u, catatonic = %d, "
> | > -				"oz_mode = %d\n", pid_nr(task_pid(current)),
> | > +				"oz_mode = %d\n", pid_to_nr(task_pid(current)),
> | >  				process_group(current), sbi->catatonic,
> | >  				oz_mode));
> | >  
> | > Index: lx26-22-rc6-mm1/fs/fcntl.c
> | > ===================================================================
> | > --- lx26-22-rc6-mm1.orig/fs/fcntl.c	2007-07-05 18:53:43.000000000 -0700
> | > +++ lx26-22-rc6-mm1/fs/fcntl.c	2007-07-05 18:54:29.000000000 -0700
> | > @@ -305,7 +305,7 @@ pid_t f_getown(struct file *filp)
> | >  {
> | >  	pid_t pid;
> | >  	read_lock(&filp->f_owner.lock);
> | > -	pid = pid_nr(filp->f_owner.pid);
> | > +	pid = pid_to_nr(filp->f_owner.pid);
> | >  	if (filp->f_owner.pid_type == PIDTYPE_PGID)
> | >  		pid = -pid;
> | >  	read_unlock(&filp->f_owner.lock);
> | > Index: lx26-22-rc6-mm1/fs/proc/array.c
> | > ===================================================================
> | > --- lx26-22-rc6-mm1.orig/fs/proc/array.c	2007-07-05 18:53:43.000000000 -0700
> | > +++ lx26-22-rc6-mm1/fs/proc/array.c	2007-07-05 18:54:29.000000000 -0700
> | > @@ -398,7 +398,7 @@ static int do_task_stat(struct task_stru
> | >  		struct signal_struct *sig = task->signal;
> | >  
> | >  		if (sig->tty) {
> | > -			tty_pgrp = pid_nr(sig->tty->pgrp);
> | > +			tty_pgrp = pid_to_nr(sig->tty->pgrp);
> | >  			tty_nr = new_encode_dev(tty_devnum(sig->tty));
> | >  		}
> | >  
> | > Index: lx26-22-rc6-mm1/fs/smbfs/proc.c
> | > ===================================================================
> | > --- lx26-22-rc6-mm1.orig/fs/smbfs/proc.c	2007-07-05 18:53:43.000000000 -0700
> | > +++ lx26-22-rc6-mm1/fs/smbfs/proc.c	2007-07-05 18:54:29.000000000 -0700
> | > @@ -972,7 +972,7 @@ smb_newconn(struct smb_sb_info *server, 
> | >  
> | >  	VERBOSE("protocol=%d, max_xmit=%d, pid=%d capabilities=0x%x\n",
> | >  		server->opt.protocol, server->opt.max_xmit,
> | > -		pid_nr(server->conn_pid), server->opt.capabilities);
> | > +		pid_to_nr(server->conn_pid), server->opt.capabilities);
> | >  
> | >  	/* FIXME: this really should be done by smbmount. */
> | >  	if (server->opt.max_xmit > SMB_MAX_PACKET_SIZE) {
> | > Index: lx26-22-rc6-mm1/ipc/mqueue.c
> | > ===================================================================
> | > --- lx26-22-rc6-mm1.orig/ipc/mqueue.c	2007-07-05 18:53:43.000000000 -0700
> | > +++ lx26-22-rc6-mm1/ipc/mqueue.c	2007-07-05 18:54:29.000000000 -0700
> | > @@ -336,7 +336,7 @@ static ssize_t mqueue_read_file(struct f
> | >  			(info->notify_owner &&
> | >  			 info->notify.sigev_notify == SIGEV_SIGNAL) ?
> | >  				info->notify.sigev_signo : 0,
> | > -			pid_nr(info->notify_owner));
> | > +			pid_to_nr(info->notify_owner));
> | >  	spin_unlock(&info->lock);
> | >  	buffer[sizeof(buffer)-1] = '\0';
> | >  	slen = strlen(buffer)+1;
> | > Index: lx26-22-rc6-mm1/kernel/fork.c
> | > ===================================================================
> | > --- lx26-22-rc6-mm1.orig/kernel/fork.c	2007-07-05 18:53:43.000000000 -0700
> | > +++ lx26-22-rc6-mm1/kernel/fork.c	2007-07-05 18:54:29.000000000 -0700
> | > @@ -1032,7 +1032,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_nr(pid);
> | > +	p->pid = pid_to_nr(pid);
> | >  	INIT_LIST_HEAD(&p->children);
> | >  	INIT_LIST_HEAD(&p->sibling);
> | >  	p->vfork_done = NULL;
> | > Index: lx26-22-rc6-mm1/kernel/sysctl.c
> | > ===================================================================
> | > --- lx26-22-rc6-mm1.orig/kernel/sysctl.c	2007-07-05 18:53:43.000000000 -0700
> | > +++ lx26-22-rc6-mm1/kernel/sysctl.c	2007-07-05 18:54:29.000000000 -0700
> | > @@ -2313,7 +2313,7 @@ static int proc_do_cad_pid(ctl_table *ta
> | >  	pid_t tmp;
> | >  	int r;
> | >  
> | > -	tmp = pid_nr(cad_pid);
> | > +	tmp = pid_to_nr(cad_pid);
> | >  
> | >  	r = __do_proc_dointvec(&tmp, table, write, filp, buffer,
> | >  			       lenp, ppos, NULL, NULL);
> | > Index: lx26-22-rc6-mm1/kernel/container.c
> | > ===================================================================
> | > --- lx26-22-rc6-mm1.orig/kernel/container.c	2007-07-05 18:53:43.000000000 -0700
> | > +++ lx26-22-rc6-mm1/kernel/container.c	2007-07-05 18:54:29.000000000 -0700
> | > @@ -1600,7 +1600,7 @@ static int pid_array_load(pid_t *pidarra
> | >  	while ((tsk = container_iter_next(cont, &it))) {
> | >  		if (unlikely(n == npids))
> | >  			break;
> | > -		pidarray[n++] = pid_nr(task_pid(tsk));
> | > +		pidarray[n++] = pid_to_nr(task_pid(tsk));
> | >  	}
> | >  	container_iter_end(cont, &it);
> | >  	return n;
> | > _______________________________________________
> | > Containers mailing list
> | > Containers at lists.linux-foundation.org
> | > https://lists.linux-foundation.org/mailman/listinfo/containers
> | > 
> | > _______________________________________________
> | > Devel mailing list
> | > Devel at openvz.org
> | > https://openvz.org/mailman/listinfo/devel
> | > 
> 



More information about the Containers mailing list