diff options
-rw-r--r-- | kernel/pid_namespace.c | 10 |
1 files changed, 6 insertions, 4 deletions
diff --git a/kernel/pid_namespace.c b/kernel/pid_namespace.c index df9e8e9e0be7..eef2ce968636 100644 --- a/kernel/pid_namespace.c +++ b/kernel/pid_namespace.c | |||
@@ -151,8 +151,12 @@ out: | |||
151 | 151 | ||
152 | static void delayed_free_pidns(struct rcu_head *p) | 152 | static void delayed_free_pidns(struct rcu_head *p) |
153 | { | 153 | { |
154 | kmem_cache_free(pid_ns_cachep, | 154 | struct pid_namespace *ns = container_of(p, struct pid_namespace, rcu); |
155 | container_of(p, struct pid_namespace, rcu)); | 155 | |
156 | dec_pid_namespaces(ns->ucounts); | ||
157 | put_user_ns(ns->user_ns); | ||
158 | |||
159 | kmem_cache_free(pid_ns_cachep, ns); | ||
156 | } | 160 | } |
157 | 161 | ||
158 | static void destroy_pid_namespace(struct pid_namespace *ns) | 162 | static void destroy_pid_namespace(struct pid_namespace *ns) |
@@ -162,8 +166,6 @@ static void destroy_pid_namespace(struct pid_namespace *ns) | |||
162 | ns_free_inum(&ns->ns); | 166 | ns_free_inum(&ns->ns); |
163 | for (i = 0; i < PIDMAP_ENTRIES; i++) | 167 | for (i = 0; i < PIDMAP_ENTRIES; i++) |
164 | kfree(ns->pidmap[i].page); | 168 | kfree(ns->pidmap[i].page); |
165 | dec_pid_namespaces(ns->ucounts); | ||
166 | put_user_ns(ns->user_ns); | ||
167 | call_rcu(&ns->rcu, delayed_free_pidns); | 169 | call_rcu(&ns->rcu, delayed_free_pidns); |
168 | } | 170 | } |
169 | 171 | ||