1#ifndef _NAMESPACE_H_
2#define _NAMESPACE_H_
3#ifdef __KERNEL__
4
5struct namespace {
6	atomic_t		count;
7	struct vfsmount *	root;
8	struct list_head	list;
9	struct rw_semaphore	sem;
10};
11
12extern void umount_tree(struct vfsmount *);
13
14static inline void put_namespace(struct namespace *namespace)
15{
16	if (atomic_dec_and_test(&namespace->count)) {
17		down_write(&namespace->sem);
18		spin_lock(&dcache_lock);
19		umount_tree(namespace->root);
20		spin_unlock(&dcache_lock);
21		up_write(&namespace->sem);
22		kfree(namespace);
23	}
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}
36extern int copy_namespace(int, struct task_struct *);
37
38static inline void get_namespace(struct namespace *namespace)
39{
40	atomic_inc(&namespace->count);
41}
42
43#endif
44#endif
45