Skip to contentSkip to conversation

cgroups: remove rcu_read_lock() in cgroupstats_build()

PATCH In review Lai Jiangshan 2 participants 2 messages Nov 22, 2008 – Nov 24, 2008

lore
Share & tools
lore
#0 lore raw

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
index 358e775..e6d92a5 100644
@@ -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;
 }
Acked-by on v1 1/1
#1 lore raw
Quoted 11 lines · Lai Jiangshan

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_*.

Seems reasonable. Thanks,

Paul

Quoted 24 lines

---

kernel/cgroup.c +0 -2
index 358e775..e6d92a5 100644
@@ -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;
 }