16b3286edSKirill Korotaev #ifndef _NAMESPACE_H_ 26b3286edSKirill Korotaev #define _NAMESPACE_H_ 36b3286edSKirill Korotaev #ifdef __KERNEL__ 46b3286edSKirill Korotaev 56b3286edSKirill Korotaev #include <linux/mount.h> 66b3286edSKirill Korotaev #include <linux/sched.h> 76b3286edSKirill Korotaev #include <linux/nsproxy.h> 86b3286edSKirill Korotaev 96b3286edSKirill Korotaev struct mnt_namespace { 106b3286edSKirill Korotaev atomic_t count; 116b3286edSKirill Korotaev struct vfsmount * root; 126b3286edSKirill Korotaev struct list_head list; 136b3286edSKirill Korotaev wait_queue_head_t poll; 146b3286edSKirill Korotaev int event; 156b3286edSKirill Korotaev }; 166b3286edSKirill Korotaev 17*213dd266SEric W. Biederman extern struct mnt_namespace *copy_mnt_ns(unsigned long, struct mnt_namespace *, 186b3286edSKirill Korotaev struct fs_struct *); 19e3222c4eSBadari Pulavarty extern void __put_mnt_ns(struct mnt_namespace *ns); 206b3286edSKirill Korotaev 216b3286edSKirill Korotaev static inline void put_mnt_ns(struct mnt_namespace *ns) 226b3286edSKirill Korotaev { 236b3286edSKirill Korotaev if (atomic_dec_and_lock(&ns->count, &vfsmount_lock)) 246b3286edSKirill Korotaev /* releases vfsmount_lock */ 256b3286edSKirill Korotaev __put_mnt_ns(ns); 266b3286edSKirill Korotaev } 276b3286edSKirill Korotaev 286b3286edSKirill Korotaev static inline void exit_mnt_ns(struct task_struct *p) 296b3286edSKirill Korotaev { 306b3286edSKirill Korotaev struct mnt_namespace *ns = p->nsproxy->mnt_ns; 316b3286edSKirill Korotaev if (ns) 326b3286edSKirill Korotaev put_mnt_ns(ns); 336b3286edSKirill Korotaev } 346b3286edSKirill Korotaev 356b3286edSKirill Korotaev static inline void get_mnt_ns(struct mnt_namespace *ns) 366b3286edSKirill Korotaev { 376b3286edSKirill Korotaev atomic_inc(&ns->count); 386b3286edSKirill Korotaev } 396b3286edSKirill Korotaev 406b3286edSKirill Korotaev #endif 416b3286edSKirill Korotaev #endif 42