forked from mirrors/linux
		
	 741a295130
			
		
	
	
		741a295130
		
	
	
	
	
		
			
			If the namespace structure is being shared, allocate a new one and copy information from the current, shared, structure. Signed-off-by: Janak Desai <janak@us.ibm.com> Cc: Al Viro <viro@ftp.linux.org.uk> Cc: Christoph Hellwig <hch@lst.de> Cc: Michael Kerrisk <mtk-manpages@gmx.net> Cc: Andi Kleen <ak@muc.de> Cc: Paul Mackerras <paulus@samba.org> Signed-off-by: Andrew Morton <akpm@osdl.org> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
		
			
				
	
	
		
			44 lines
		
	
	
	
		
			951 B
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			44 lines
		
	
	
	
		
			951 B
		
	
	
	
		
			C
		
	
	
	
	
	
| #ifndef _NAMESPACE_H_
 | |
| #define _NAMESPACE_H_
 | |
| #ifdef __KERNEL__
 | |
| 
 | |
| #include <linux/mount.h>
 | |
| #include <linux/sched.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->namespace;
 | |
| 	if (namespace) {
 | |
| 		task_lock(p);
 | |
| 		p->namespace = NULL;
 | |
| 		task_unlock(p);
 | |
| 		put_namespace(namespace);
 | |
| 	}
 | |
| }
 | |
| 
 | |
| static inline void get_namespace(struct namespace *namespace)
 | |
| {
 | |
| 	atomic_inc(&namespace->count);
 | |
| }
 | |
| 
 | |
| #endif
 | |
| #endif
 |