diff options
Diffstat (limited to 'include/linux/mnt_namespace.h')
-rw-r--r-- | include/linux/mnt_namespace.h | 42 |
1 files changed, 42 insertions, 0 deletions
diff --git a/include/linux/mnt_namespace.h b/include/linux/mnt_namespace.h new file mode 100644 index 000000000000..4af0b1fc282a --- /dev/null +++ b/include/linux/mnt_namespace.h | |||
@@ -0,0 +1,42 @@ | |||
1 | #ifndef _NAMESPACE_H_ | ||
2 | #define _NAMESPACE_H_ | ||
3 | #ifdef __KERNEL__ | ||
4 | |||
5 | #include <linux/mount.h> | ||
6 | #include <linux/sched.h> | ||
7 | #include <linux/nsproxy.h> | ||
8 | |||
9 | struct mnt_namespace { | ||
10 | atomic_t count; | ||
11 | struct vfsmount * root; | ||
12 | struct list_head list; | ||
13 | wait_queue_head_t poll; | ||
14 | int event; | ||
15 | }; | ||
16 | |||
17 | extern int copy_mnt_ns(int, struct task_struct *); | ||
18 | extern void __put_mnt_ns(struct mnt_namespace *ns); | ||
19 | extern struct mnt_namespace *dup_mnt_ns(struct task_struct *, | ||
20 | struct fs_struct *); | ||
21 | |||
22 | static inline void put_mnt_ns(struct mnt_namespace *ns) | ||
23 | { | ||
24 | if (atomic_dec_and_lock(&ns->count, &vfsmount_lock)) | ||
25 | /* releases vfsmount_lock */ | ||
26 | __put_mnt_ns(ns); | ||
27 | } | ||
28 | |||
29 | static inline void exit_mnt_ns(struct task_struct *p) | ||
30 | { | ||
31 | struct mnt_namespace *ns = p->nsproxy->mnt_ns; | ||
32 | if (ns) | ||
33 | put_mnt_ns(ns); | ||
34 | } | ||
35 | |||
36 | static inline void get_mnt_ns(struct mnt_namespace *ns) | ||
37 | { | ||
38 | atomic_inc(&ns->count); | ||
39 | } | ||
40 | |||
41 | #endif | ||
42 | #endif | ||