From: "Serge E. Hallyn" <[EMAIL PROTECTED]>
Subject: [RFC PATCH 3/4] namespace containers: add nsproxy to nscont struct

Each ns container is associated with an nsproxy.  Add that
nsproxy to the nscont struct, set it when a container is auto-
created on clone/unshare, and inc/dec the nsproxy to account for
each container referencing it.

Note that once the nscont->nsproxy is set, it will never change
for the duration of the container's lifetime.

Signed-off-by: Serge E. Hallyn <[EMAIL PROTECTED]>

---

 kernel/container.c    |   11 +++++++++++
 kernel/ns_container.c |   11 +++++++++++
 2 files changed, 22 insertions(+), 0 deletions(-)

e4dd14babf4fef1849cb0c5e797f8d176eb9a0a4
diff --git a/kernel/container.c b/kernel/container.c
index fc559ce..4608a12 100644
--- a/kernel/container.c
+++ b/kernel/container.c
@@ -1581,6 +1581,14 @@ static void get_unused_name(char *buf) {
        sprintf(buf, "node%d", atomic_inc_return(&namecnt));
 }
 
+/* XXX need to create include/linux/ns_container.h and move this there */
+#ifdef CONFIG_CONTAINER_NS
+void ns_set_nsproxy_from_task(struct container *cont, struct task_struct *tsk);
+#else
+static inline void
+ns_set_nsproxy_from_task(struct container *cont, struct task_struct *tsk) { }
+#endif
+
 /**
  * container_clone - duplicate the current container and move this
  * task into the new child
@@ -1669,6 +1677,9 @@ int container_clone(struct task_struct *
                goto again;
        }
 
+       /* mark the auto-created container with the new namespace list */
+       ns_set_nsproxy_from_task(child, tsk);
+
        /* All seems fine. Finish by moving the task into the new container */
        ret = attach_task(child, tsk);
        mutex_unlock(&manage_mutex);
diff --git a/kernel/ns_container.c b/kernel/ns_container.c
index d60d4f5..2d5c578 100644
--- a/kernel/ns_container.c
+++ b/kernel/ns_container.c
@@ -11,6 +11,7 @@
 
 struct nscont {
        struct container_subsys_state css;
+       struct nsproxy *nsproxy; /* never changes once set */
        spinlock_t lock;
 };
 
@@ -81,10 +82,20 @@ static int ns_create(struct container_su
        return 0;
 }
 
+/* called from container_clone */
+void ns_set_nsproxy_from_task(struct container *cont, struct task_struct *tsk)
+{
+       struct nscont *ns = container_nscont(cont);
+       ns->nsproxy = tsk->nsproxy;
+       get_nsproxy(ns->nsproxy);
+}
+
 static void ns_destroy(struct container_subsys *ss,
                       struct container *cont)
 {
        struct nscont *ns = container_nscont(cont);
+       if (ns->nsproxy)
+               put_nsproxy(ns->nsproxy);
        kfree(ns);
 }
 
-- 
1.1.6

-------------------------------------------------------------------------
Using Tomcat but need to do more? Need to support web services, security?
Get stuff done quickly with pre-integrated technology to make your job easier.
Download IBM WebSphere Application Server v.1.0.1 based on Apache Geronimo
http://sel.as-us.falkag.net/sel?cmd=lnk&kid=120709&bid=263057&dat=121642
_______________________________________________
ckrm-tech mailing list
https://lists.sourceforge.net/lists/listinfo/ckrm-tech

Reply via email to