cgroup: Check task_lock in task_subsys_state()
PATCH 1/1 cgroup: Check task_lock in task_subsys_state()
task_subsys_state() is safe under task_lock(). See Documentation/cgroups/cgroups.txt for locking rule.
This fixes an RCU warning when resume from suspend. The warning comes from freezer cgroup in cgroup_freezing_or_frozen().
---
I'm not sure which is preferable - access ->alloc_lock directly like this patch or add task_lock_is_held() in sched.h
--- include/linux/cgroup.h | 1 + 1 files changed, 1 insertions(+), 0 deletions(-)
include/linux/cgroup.h +1 -0
@@ -530,6 +530,7 @@ static inline struct cgroup_subsys_state *task_subsys_state( {return rcu_dereference_check (task->cgroups->subsys[subsys_id],rcu_read_lock_held () || +lockdep_is_held (&task->alloc_lock) ||cgroup_lock_is_held ()); }
Signature · 1 line
1.6.3
Quoted 7 lines · Li Zefan
task_subsys_state()is safe undertask_lock(). SeeDocumentation/cgroups/cgroups.txtfor locking rule.This fixes an RCU warning when resume from suspend. The warning comes from freezer cgroup in
cgroup_freezing_or_frozen().Signed-off-by Li Zefan <[email protected]>
Quoted 23 lines
---
I'm not sure which is preferable - access ->alloc_lock directly like this patch or add
task_lock_is_held()insched.h--- include/linux/cgroup.h | 1 + 1 files changed, 1 insertions(+), 0 deletions(-)include/linux/cgroup.h +1
-0@@ -530,6 +530,7 @@ static inline struct cgroup_subsys_state *task_subsys_state( {return rcu_dereference_check (task->cgroups->subsys[subsys_id],rcu_read_lock_held () || +lockdep_is_held (&task->alloc_lock) ||cgroup_lock_is_held ()); }Signature · 1 line
1.6.3
Quoted 11 lines · Li Zefan
task_subsys_state()is safe undertask_lock(). SeeDocumentation/cgroups/cgroups.txtfor locking rule.This fixes an RCU warning when resume from suspend. The warning comes from freezer cgroup in
cgroup_freezing_or_frozen().Signed-off-by Li Zefan <[email protected]>---
I'm not sure which is preferable - access ->alloc_lock directly like this patch or add
task_lock_is_held()insched.h
This is for the maintainers to decide, either way works from my viewpoint.
I have queued it as is with Matt's Acked-by, and am testing it. Thank you!!!
Thanx, Paul
Quoted 18 lines
--- include/linux/cgroup.h | 1 + 1 files changed, 1 insertions(+), 0 deletions(-)include/linux/cgroup.h +1
-0@@ -530,6 +530,7 @@ static inline struct cgroup_subsys_state *task_subsys_state( {return rcu_dereference_check (task->cgroups->subsys[subsys_id],rcu_read_lock_held () || +lockdep_is_held (&task->alloc_lock) ||cgroup_lock_is_held ()); }Signature · 1 line
1.6.3