forked from mirrors/linux
		
	This moves the mount namespace into the nsproxy. The mount namespace count now refers to the number of nsproxies point to it, rather than the number of tasks. As a result, the unshare_namespace() function in kernel/fork.c no longer checks whether it is being shared. Signed-off-by: Serge Hallyn <serue@us.ibm.com> Cc: Kirill Korotaev <dev@openvz.org> Cc: "Eric W. Biederman" <ebiederm@xmission.com> Cc: Herbert Poetzl <herbert@13thfloor.at> Cc: Andrey Savochkin <saw@sw.ru> Signed-off-by: Andrew Morton <akpm@osdl.org> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
		
			
				
	
	
		
			42 lines
		
	
	
	
		
			930 B
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			42 lines
		
	
	
	
		
			930 B
		
	
	
	
		
			C
		
	
	
	
	
	
#ifndef _NAMESPACE_H_
 | 
						|
#define _NAMESPACE_H_
 | 
						|
#ifdef __KERNEL__
 | 
						|
 | 
						|
#include <linux/mount.h>
 | 
						|
#include <linux/sched.h>
 | 
						|
#include <linux/nsproxy.h>
 | 
						|
 | 
						|
struct namespace {
 | 
						|
	atomic_t		count;
 | 
						|
	struct vfsmount *	root;
 | 
						|
	struct list_head	list;
 | 
						|
	wait_queue_head_t poll;
 | 
						|
	int event;
 | 
						|
};
 | 
						|
 | 
						|
extern int copy_namespace(int, struct task_struct *);
 | 
						|
extern void __put_namespace(struct namespace *namespace);
 | 
						|
extern struct namespace *dup_namespace(struct task_struct *, struct fs_struct *);
 | 
						|
 | 
						|
static inline void put_namespace(struct namespace *namespace)
 | 
						|
{
 | 
						|
	if (atomic_dec_and_lock(&namespace->count, &vfsmount_lock))
 | 
						|
		/* releases vfsmount_lock */
 | 
						|
		__put_namespace(namespace);
 | 
						|
}
 | 
						|
 | 
						|
static inline void exit_namespace(struct task_struct *p)
 | 
						|
{
 | 
						|
	struct namespace *namespace = p->nsproxy->namespace;
 | 
						|
	if (namespace) {
 | 
						|
		put_namespace(namespace);
 | 
						|
	}
 | 
						|
}
 | 
						|
 | 
						|
static inline void get_namespace(struct namespace *namespace)
 | 
						|
{
 | 
						|
	atomic_inc(&namespace->count);
 | 
						|
}
 | 
						|
 | 
						|
#endif
 | 
						|
#endif
 |