From e6ef390a006766c5114b28d27b3eebc6b7c1aa4c Mon Sep 17 00:00:00 2001 From: "Eric W. Biederman" Date: Wed, 14 Nov 2007 17:00:13 -0800 Subject: [PATCH] --- yaml --- r: 73726 b: refs/heads/master c: 57d5f66b86079efac5c9a7843cce2a9bcbe58fb8 h: refs/heads/master v: v3 --- [refs] | 2 +- trunk/include/linux/pid_namespace.h | 23 +++++++++++++++++++++++ trunk/init/Kconfig | 12 ++++++++++++ trunk/kernel/pid.c | 2 ++ 4 files changed, 38 insertions(+), 1 deletion(-) diff --git a/[refs] b/[refs] index efb39a881a85..c08fa62b4bf7 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 42614fcde7bfdcbe43a7b17035c167dfebc354dd +refs/heads/master: 57d5f66b86079efac5c9a7843cce2a9bcbe58fb8 diff --git a/trunk/include/linux/pid_namespace.h b/trunk/include/linux/pid_namespace.h index 0135c76c76c6..1689e28483e4 100644 --- a/trunk/include/linux/pid_namespace.h +++ b/trunk/include/linux/pid_namespace.h @@ -29,6 +29,7 @@ struct pid_namespace { extern struct pid_namespace init_pid_ns; +#ifdef CONFIG_PID_NS static inline struct pid_namespace *get_pid_ns(struct pid_namespace *ns) { if (ns != &init_pid_ns) @@ -45,6 +46,28 @@ static inline void put_pid_ns(struct pid_namespace *ns) kref_put(&ns->kref, free_pid_ns); } +#else /* !CONFIG_PID_NS */ +#include + +static inline struct pid_namespace *get_pid_ns(struct pid_namespace *ns) +{ + return ns; +} + +static inline struct pid_namespace * +copy_pid_ns(unsigned long flags, struct pid_namespace *ns) +{ + if (flags & CLONE_NEWPID) + ns = ERR_PTR(-EINVAL); + return ns; +} + +static inline void put_pid_ns(struct pid_namespace *ns) +{ +} + +#endif /* CONFIG_PID_NS */ + static inline struct pid_namespace *task_active_pid_ns(struct task_struct *tsk) { return tsk->nsproxy->pid_ns; diff --git a/trunk/init/Kconfig b/trunk/init/Kconfig index 5b92e3aa1366..c5b354b1409e 100644 --- a/trunk/init/Kconfig +++ b/trunk/init/Kconfig @@ -215,6 +215,18 @@ config USER_NS vservers, to use user namespaces to provide different user info for different servers. If unsure, say N. +config PID_NS + bool "PID Namespaces (EXPERIMENTAL)" + default n + depends on EXPERIMENTAL + help + Suport process id namespaces. This allows having multiple + process with the same pid as long as they are in different + pid namespaces. This is a building block of containers. + + Unless you want to work with an experimental feature + say N here. + config AUDIT bool "Auditing support" depends on NET diff --git a/trunk/kernel/pid.c b/trunk/kernel/pid.c index d1db36b94674..f815455431bf 100644 --- a/trunk/kernel/pid.c +++ b/trunk/kernel/pid.c @@ -537,6 +537,7 @@ static struct kmem_cache *create_pid_cachep(int nr_ids) return NULL; } +#ifdef CONFIG_PID_NS static struct pid_namespace *create_pid_namespace(int level) { struct pid_namespace *ns; @@ -621,6 +622,7 @@ void free_pid_ns(struct kref *kref) if (parent != NULL) put_pid_ns(parent); } +#endif /* CONFIG_PID_NS */ void zap_pid_ns_processes(struct pid_namespace *pid_ns) {