cgroups: remove rcu_read_lock() in cgroupstats_build()
PATCH 1/1 cgroups: remove rcu_read_lock() in cgroupstats_build()
cgroup_iter_* do not need rcu_read_lock().
In cgroup_enable_task_cg_lists(), do_each_thread() and while_each_thread() are protected by RCU,
it's OK, for write_lock(&css_set_lock) implies rcu_read_lock() in non-RT kernel.
If we need explicit rcu_read_lock(), we should add rcu_read_lock() in cgroup_enable_task_cg_lists(), not cgroup_iter_*.
---
kernel/cgroup.c +0 -2
@@ -2047,7 +2047,6 @@ int cgroupstats_build(struct cgroupstats *stats, struct dentry *dentry) ret =0 ; cgrp = dentry->d_fsdata; -rcu_read_lock ();cgroup_iter_start (cgrp, &it);while ((tsk =cgroup_iter_next (cgrp, &it))) {
@@ -2072,7 +2071,6 @@ int cgroupstats_build(struct cgroupstats *stats, struct dentry *dentry) }cgroup_iter_end (cgrp, &it); -rcu_read_unlock (); err:return ret; }
Quoted 11 lines · Lai Jiangshan
cgroup_iter_* do not need
rcu_read_lock().In
cgroup_enable_task_cg_lists(),do_each_thread()andwhile_each_thread()are protected by RCU,
it's OK, forwrite_lock(&css_set_lock)impliesrcu_read_lock()in non-RT kernel.If we need explicit
rcu_read_lock(), we should addrcu_read_lock()incgroup_enable_task_cg_lists(), not cgroup_iter_*.Signed-off-by Lai Jiangshan <[email protected]>
Seems reasonable. Thanks,
Paul
Quoted 24 lines
---
kernel/cgroup.c +0
-2@@ -2047,7 +2047,6 @@ int cgroupstats_build(struct cgroupstats *stats, struct dentry *dentry) ret =0 ; cgrp = dentry->d_fsdata; -rcu_read_lock ();cgroup_iter_start (cgrp, &it);while ((tsk =cgroup_iter_next (cgrp, &it))) {@@ -2072,7 +2071,6 @@ int cgroupstats_build(struct cgroupstats *stats, struct dentry *dentry) }cgroup_iter_end (cgrp, &it); -rcu_read_unlock (); err:return ret; }