diff options
author | Tejun Heo <tj@kernel.org> | 2013-04-07 12:29:51 -0400 |
---|---|---|
committer | Tejun Heo <tj@kernel.org> | 2013-04-07 12:29:51 -0400 |
commit | 2219449a65ace0290cd9c2260ff337e326b8be8a (patch) | |
tree | ca93a1567a9e07adec09a3384d23536dca44603f /kernel/cgroup.c | |
parent | 47cfcd0922454e49f4923b1e2d31a5bf199237c3 (diff) |
cgroup: remove cgroup_lock_is_held()
We don't want controllers to assume that the information is officially
available and do funky things with it.
The only user is task_subsys_state_check() which uses it to verify RCU
access context. We can move cgroup_lock_is_held() inside
CONFIG_PROVE_RCU but that doesn't add meaningful protection compared
to conditionally exposing cgroup_mutex.
Remove cgroup_lock_is_held(), export cgroup_mutex iff CONFIG_PROVE_RCU
and use lockdep_is_held() directly on the mutex in
task_subsys_state_check().
While at it, add parentheses around macro arguments in
task_subsys_state_check().
Signed-off-by: Tejun Heo <tj@kernel.org>
Acked-by: Li Zefan <lizefan@huawei.com>
Diffstat (limited to 'kernel/cgroup.c')
-rw-r--r-- | kernel/cgroup.c | 20 |
1 files changed, 6 insertions, 14 deletions
diff --git a/kernel/cgroup.c b/kernel/cgroup.c index 1a65958c1a0b..ba3e24a76dae 100644 --- a/kernel/cgroup.c +++ b/kernel/cgroup.c | |||
@@ -83,7 +83,13 @@ | |||
83 | * B happens only through cgroup_show_options() and using cgroup_root_mutex | 83 | * B happens only through cgroup_show_options() and using cgroup_root_mutex |
84 | * breaks it. | 84 | * breaks it. |
85 | */ | 85 | */ |
86 | #ifdef CONFIG_PROVE_RCU | ||
87 | DEFINE_MUTEX(cgroup_mutex); | ||
88 | EXPORT_SYMBOL_GPL(cgroup_mutex); /* only for task_subsys_state_check() */ | ||
89 | #else | ||
86 | static DEFINE_MUTEX(cgroup_mutex); | 90 | static DEFINE_MUTEX(cgroup_mutex); |
91 | #endif | ||
92 | |||
87 | static DEFINE_MUTEX(cgroup_root_mutex); | 93 | static DEFINE_MUTEX(cgroup_root_mutex); |
88 | 94 | ||
89 | /* | 95 | /* |
@@ -251,20 +257,6 @@ static int cgroup_destroy_locked(struct cgroup *cgrp); | |||
251 | static int cgroup_addrm_files(struct cgroup *cgrp, struct cgroup_subsys *subsys, | 257 | static int cgroup_addrm_files(struct cgroup *cgrp, struct cgroup_subsys *subsys, |
252 | struct cftype cfts[], bool is_add); | 258 | struct cftype cfts[], bool is_add); |
253 | 259 | ||
254 | #ifdef CONFIG_PROVE_LOCKING | ||
255 | int cgroup_lock_is_held(void) | ||
256 | { | ||
257 | return lockdep_is_held(&cgroup_mutex); | ||
258 | } | ||
259 | #else /* #ifdef CONFIG_PROVE_LOCKING */ | ||
260 | int cgroup_lock_is_held(void) | ||
261 | { | ||
262 | return mutex_is_locked(&cgroup_mutex); | ||
263 | } | ||
264 | #endif /* #else #ifdef CONFIG_PROVE_LOCKING */ | ||
265 | |||
266 | EXPORT_SYMBOL_GPL(cgroup_lock_is_held); | ||
267 | |||
268 | static int css_unbias_refcnt(int refcnt) | 260 | static int css_unbias_refcnt(int refcnt) |
269 | { | 261 | { |
270 | return refcnt >= 0 ? refcnt : refcnt - CSS_DEACT_BIAS; | 262 | return refcnt >= 0 ? refcnt : refcnt - CSS_DEACT_BIAS; |