diff options
-rw-r--r-- | include/linux/cgroup.h | 3 | ||||
-rw-r--r-- | kernel/cgroup.c | 8 |
2 files changed, 10 insertions, 1 deletions
diff --git a/include/linux/cgroup.h b/include/linux/cgroup.h index 88e863460726..3ac78a2f4b5a 100644 --- a/include/linux/cgroup.h +++ b/include/linux/cgroup.h | |||
@@ -260,6 +260,9 @@ struct css_set { | |||
260 | * during subsystem registration (at boot time). | 260 | * during subsystem registration (at boot time). |
261 | */ | 261 | */ |
262 | struct cgroup_subsys_state *subsys[CGROUP_SUBSYS_COUNT]; | 262 | struct cgroup_subsys_state *subsys[CGROUP_SUBSYS_COUNT]; |
263 | |||
264 | /* For RCU-protected deletion */ | ||
265 | struct rcu_head rcu_head; | ||
263 | }; | 266 | }; |
264 | 267 | ||
265 | /* | 268 | /* |
diff --git a/kernel/cgroup.c b/kernel/cgroup.c index 3e356b05b2d5..bf8dd1a9f2d1 100644 --- a/kernel/cgroup.c +++ b/kernel/cgroup.c | |||
@@ -267,6 +267,12 @@ static struct hlist_head *css_set_hash(struct cgroup_subsys_state *css[]) | |||
267 | return &css_set_table[index]; | 267 | return &css_set_table[index]; |
268 | } | 268 | } |
269 | 269 | ||
270 | static void free_css_set_rcu(struct rcu_head *obj) | ||
271 | { | ||
272 | struct css_set *cg = container_of(obj, struct css_set, rcu_head); | ||
273 | kfree(cg); | ||
274 | } | ||
275 | |||
270 | /* We don't maintain the lists running through each css_set to its | 276 | /* We don't maintain the lists running through each css_set to its |
271 | * task until after the first call to cgroup_iter_start(). This | 277 | * task until after the first call to cgroup_iter_start(). This |
272 | * reduces the fork()/exit() overhead for people who have cgroups | 278 | * reduces the fork()/exit() overhead for people who have cgroups |
@@ -310,7 +316,7 @@ static void __put_css_set(struct css_set *cg, int taskexit) | |||
310 | } | 316 | } |
311 | 317 | ||
312 | write_unlock(&css_set_lock); | 318 | write_unlock(&css_set_lock); |
313 | kfree(cg); | 319 | call_rcu(&cg->rcu_head, free_css_set_rcu); |
314 | } | 320 | } |
315 | 321 | ||
316 | /* | 322 | /* |