blob: 6731977c4c13a00e39a251a12d7be31311960062 [file] [log] [blame]
Linus Torvalds1da177e2005-04-16 15:20:36 -07001#ifndef _NAMESPACE_H_
2#define _NAMESPACE_H_
3#ifdef __KERNEL__
4
5#include <linux/mount.h>
6#include <linux/sched.h>
7
8struct namespace {
9 atomic_t count;
10 struct vfsmount * root;
11 struct list_head list;
Al Viro5addc5d2005-11-07 17:15:49 -050012 wait_queue_head_t poll;
13 int event;
Linus Torvalds1da177e2005-04-16 15:20:36 -070014};
15
Linus Torvalds1da177e2005-04-16 15:20:36 -070016extern int copy_namespace(int, struct task_struct *);
17extern void __put_namespace(struct namespace *namespace);
18
19static inline void put_namespace(struct namespace *namespace)
20{
Miklos Szeredi1ce88cf2005-07-07 17:57:24 -070021 if (atomic_dec_and_lock(&namespace->count, &vfsmount_lock))
22 /* releases vfsmount_lock */
Linus Torvalds1da177e2005-04-16 15:20:36 -070023 __put_namespace(namespace);
24}
25
26static inline void exit_namespace(struct task_struct *p)
27{
28 struct namespace *namespace = p->namespace;
29 if (namespace) {
30 task_lock(p);
31 p->namespace = NULL;
32 task_unlock(p);
33 put_namespace(namespace);
34 }
35}
36
37static inline void get_namespace(struct namespace *namespace)
38{
39 atomic_inc(&namespace->count);
40}
41
42#endif
43#endif