Commit bb758421 authored by Shakeel Butt's avatar Shakeel Butt Committed by Tejun Heo
Browse files

cgroup: remove cgroup_mutex from cgroupstats_build



The function cgroupstats_build extracts cgroup from the kernfs_node's
priv pointer which is a RCU pointer. So, there is no need to grab
cgroup_mutex. Just get the reference on the cgroup before using and
remove the cgroup_mutex altogether.

Signed-off-by: default avatarShakeel Butt <shakeelb@google.com>
Signed-off-by: default avatarTejun Heo <tj@kernel.org>
parent be288169
Loading
Loading
Loading
Loading
+2 −5
Original line number Diff line number Diff line
@@ -698,8 +698,6 @@ int cgroupstats_build(struct cgroupstats *stats, struct dentry *dentry)
	    kernfs_type(kn) != KERNFS_DIR)
		return -EINVAL;

	mutex_lock(&cgroup_mutex);

	/*
	 * We aren't being called from kernfs and there's no guarantee on
	 * @kn->priv's validity.  For this and css_tryget_online_from_dir(),
@@ -707,9 +705,8 @@ int cgroupstats_build(struct cgroupstats *stats, struct dentry *dentry)
	 */
	rcu_read_lock();
	cgrp = rcu_dereference(*(void __rcu __force **)&kn->priv);
	if (!cgrp || cgroup_is_dead(cgrp)) {
	if (!cgrp || !cgroup_tryget(cgrp)) {
		rcu_read_unlock();
		mutex_unlock(&cgroup_mutex);
		return -ENOENT;
	}
	rcu_read_unlock();
@@ -737,7 +734,7 @@ int cgroupstats_build(struct cgroupstats *stats, struct dentry *dentry)
	}
	css_task_iter_end(&it);

	mutex_unlock(&cgroup_mutex);
	cgroup_put(cgrp);
	return 0;
}