forked from luck/tmp_suning_uos_patched
1651e14e28
This moves the mount namespace into the nsproxy. The mount namespace count now refers to the number of nsproxies point to it, rather than the number of tasks. As a result, the unshare_namespace() function in kernel/fork.c no longer checks whether it is being shared. Signed-off-by: Serge Hallyn <serue@us.ibm.com> Cc: Kirill Korotaev <dev@openvz.org> Cc: "Eric W. Biederman" <ebiederm@xmission.com> Cc: Herbert Poetzl <herbert@13thfloor.at> Cc: Andrey Savochkin <saw@sw.ru> Signed-off-by: Andrew Morton <akpm@osdl.org> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
43 lines
930 B
C
43 lines
930 B
C
#ifndef _NAMESPACE_H_
|
|
#define _NAMESPACE_H_
|
|
#ifdef __KERNEL__
|
|
|
|
#include <linux/mount.h>
|
|
#include <linux/sched.h>
|
|
#include <linux/nsproxy.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->nsproxy->namespace;
|
|
if (namespace) {
|
|
put_namespace(namespace);
|
|
}
|
|
}
|
|
|
|
static inline void get_namespace(struct namespace *namespace)
|
|
{
|
|
atomic_inc(&namespace->count);
|
|
}
|
|
|
|
#endif
|
|
#endif
|