mirror of
				https://github.com/torvalds/linux.git
				synced 2025-11-04 02:30:34 +02:00 
			
		
		
		
	pidns: make create_pid_namespace() accept parent pidns
create_pid_namespace() creates everything, but caller has to assign parent pidns by hand, which is unnatural. At the moment of call new ->level has to be taken from somewhere and parent pidns is already available. Signed-off-by: Alexey Dobriyan <adobriyan@gmail.com> Cc: Pavel Emelyanov <xemul@openvz.org> Cc: "Eric W. Biederman" <ebiederm@xmission.com> Acked-by: Serge Hallyn <serue@us.ibm.com> Acked-by: Sukadev Bhattiprolu <sukadev@linux.vnet.ibm.com> Reviewed-by: WANG Cong <xiyou.wangcong@gmail.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:
		
							parent
							
								
									17f98dcf60
								
							
						
					
					
						commit
						ed469a63c3
					
				
					 1 changed files with 4 additions and 4 deletions
				
			
		| 
						 | 
					@ -67,9 +67,10 @@ static struct kmem_cache *create_pid_cachep(int nr_ids)
 | 
				
			||||||
	return NULL;
 | 
						return NULL;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static struct pid_namespace *create_pid_namespace(unsigned int level)
 | 
					static struct pid_namespace *create_pid_namespace(struct pid_namespace *parent_pid_ns)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	struct pid_namespace *ns;
 | 
						struct pid_namespace *ns;
 | 
				
			||||||
 | 
						unsigned int level = parent_pid_ns->level + 1;
 | 
				
			||||||
	int i;
 | 
						int i;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	ns = kmem_cache_zalloc(pid_ns_cachep, GFP_KERNEL);
 | 
						ns = kmem_cache_zalloc(pid_ns_cachep, GFP_KERNEL);
 | 
				
			||||||
| 
						 | 
					@ -86,6 +87,7 @@ static struct pid_namespace *create_pid_namespace(unsigned int level)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	kref_init(&ns->kref);
 | 
						kref_init(&ns->kref);
 | 
				
			||||||
	ns->level = level;
 | 
						ns->level = level;
 | 
				
			||||||
 | 
						ns->parent = get_pid_ns(parent_pid_ns);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	set_bit(0, ns->pidmap[0].page);
 | 
						set_bit(0, ns->pidmap[0].page);
 | 
				
			||||||
	atomic_set(&ns->pidmap[0].nr_free, BITS_PER_PAGE - 1);
 | 
						atomic_set(&ns->pidmap[0].nr_free, BITS_PER_PAGE - 1);
 | 
				
			||||||
| 
						 | 
					@ -125,9 +127,7 @@ struct pid_namespace *copy_pid_ns(unsigned long flags, struct pid_namespace *old
 | 
				
			||||||
	if (flags & CLONE_THREAD)
 | 
						if (flags & CLONE_THREAD)
 | 
				
			||||||
		goto out_put;
 | 
							goto out_put;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	new_ns = create_pid_namespace(old_ns->level + 1);
 | 
						new_ns = create_pid_namespace(old_ns);
 | 
				
			||||||
	if (!IS_ERR(new_ns))
 | 
					 | 
				
			||||||
		new_ns->parent = get_pid_ns(old_ns);
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
out_put:
 | 
					out_put:
 | 
				
			||||||
	put_pid_ns(old_ns);
 | 
						put_pid_ns(old_ns);
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in a new issue