|  | #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 |