|
@@ -1756,9 +1756,11 @@ static struct kobject *cgroup_kobj;
|
|
|
*/
|
|
|
int cgroup_path(const struct cgroup *cgrp, char *buf, int buflen)
|
|
|
{
|
|
|
+ struct dentry *dentry = cgrp->dentry;
|
|
|
char *start;
|
|
|
- struct dentry *dentry = rcu_dereference_check(cgrp->dentry,
|
|
|
- cgroup_lock_is_held());
|
|
|
+
|
|
|
+ rcu_lockdep_assert(rcu_read_lock_held() || cgroup_lock_is_held(),
|
|
|
+ "cgroup_path() called without proper locking");
|
|
|
|
|
|
if (!dentry || cgrp == dummytop) {
|
|
|
/*
|
|
@@ -1782,8 +1784,7 @@ int cgroup_path(const struct cgroup *cgrp, char *buf, int buflen)
|
|
|
if (!cgrp)
|
|
|
break;
|
|
|
|
|
|
- dentry = rcu_dereference_check(cgrp->dentry,
|
|
|
- cgroup_lock_is_held());
|
|
|
+ dentry = cgrp->dentry;
|
|
|
if (!cgrp->parent)
|
|
|
continue;
|
|
|
if (--start < buf)
|
|
@@ -4124,7 +4125,7 @@ static long cgroup_create(struct cgroup *parent, struct dentry *dentry,
|
|
|
|
|
|
/* allocation complete, commit to creation */
|
|
|
dentry->d_fsdata = cgrp;
|
|
|
- rcu_assign_pointer(cgrp->dentry, dentry);
|
|
|
+ cgrp->dentry = dentry;
|
|
|
list_add_tail(&cgrp->allcg_node, &root->allcg_list);
|
|
|
list_add_tail_rcu(&cgrp->sibling, &cgrp->parent->children);
|
|
|
root->number_of_cgroups++;
|