[Devel] [PATCH VZ8 v1 14/14] cgroup: relaxed lockdep assertion for cset_cgroup_from_root
Valeriy Vdovin
valeriy.vdovin at virtuozzo.com
Wed Jan 20 12:56:30 MSK 2021
Signed-off-by: Valeriy Vdovin <valeriy.vdovin at virtuozzo.com>
---
kernel/cgroup/cgroup-internal.h | 3 ++-
kernel/cgroup/cgroup-v1.c | 3 ++-
kernel/cgroup/cgroup.c | 15 +++++++++------
3 files changed, 13 insertions(+), 8 deletions(-)
diff --git a/kernel/cgroup/cgroup-internal.h b/kernel/cgroup/cgroup-internal.h
index 112bd917e99d..e1ce16e77bb4 100644
--- a/kernel/cgroup/cgroup-internal.h
+++ b/kernel/cgroup/cgroup-internal.h
@@ -161,7 +161,8 @@ static inline bool notify_on_release(const struct cgroup *cgrp)
}
struct cgroup *cset_cgroup_from_root(struct css_set *cset,
- struct cgroup_root *root);
+ struct cgroup_root *root,
+ bool assert_locks_strict);
bool cgroup_ssid_enabled(int ssid);
bool cgroup_on_dfl(const struct cgroup *cgrp);
diff --git a/kernel/cgroup/cgroup-v1.c b/kernel/cgroup/cgroup-v1.c
index 46be2f688503..57d36cf69aea 100644
--- a/kernel/cgroup/cgroup-v1.c
+++ b/kernel/cgroup/cgroup-v1.c
@@ -1022,7 +1022,8 @@ static int cgroup1_show_options(struct seq_file *seq, struct kernfs_root *kf_roo
spin_lock_irq(&css_set_lock);
cset = ve_ns->cgroup_ns->root_cset;
BUG_ON(!cset);
- root_cgrp = cset_cgroup_from_root(cset, root);
+ root_cgrp = cset_cgroup_from_root(cset, root,
+ false);
spin_unlock_irq(&css_set_lock);
}
}
diff --git a/kernel/cgroup/cgroup.c b/kernel/cgroup/cgroup.c
index 34e049361611..aac04a729535 100644
--- a/kernel/cgroup/cgroup.c
+++ b/kernel/cgroup/cgroup.c
@@ -1437,11 +1437,13 @@ current_cgns_cgroup_from_root(struct cgroup_root *root)
/* look up cgroup associated with given css_set on the specified hierarchy */
struct cgroup *cset_cgroup_from_root(struct css_set *cset,
- struct cgroup_root *root)
+ struct cgroup_root *root,
+ bool assert_locks_strict)
{
struct cgroup *res = NULL;
- lockdep_assert_held(&cgroup_mutex);
+ if (assert_locks_strict)
+ lockdep_assert_held(&cgroup_mutex);
lockdep_assert_held(&css_set_lock);
if (cset == &init_css_set) {
@@ -1476,7 +1478,7 @@ struct cgroup *task_cgroup_from_root(struct task_struct *task,
* No need to lock the task - since we hold css_set_lock the
* task can't change groups.
*/
- return cset_cgroup_from_root(task_css_set(task), root);
+ return cset_cgroup_from_root(task_css_set(task), root, true);
}
/*
@@ -2284,7 +2286,7 @@ struct dentry *cgroup_do_mount(struct file_system_type *fs_type, int flags,
mutex_lock(&cgroup_mutex);
spin_lock_irq(&css_set_lock);
- cgrp = cset_cgroup_from_root(ns->root_cset, root);
+ cgrp = cset_cgroup_from_root(ns->root_cset, root, true);
spin_unlock_irq(&css_set_lock);
mutex_unlock(&cgroup_mutex);
@@ -2380,7 +2382,8 @@ static struct file_system_type cgroup2_fs_type = {
int cgroup_path_ns_locked(struct cgroup *cgrp, char *buf, size_t buflen,
struct cgroup_namespace *ns)
{
- struct cgroup *root = cset_cgroup_from_root(ns->root_cset, cgrp->root);
+ struct cgroup *root = cset_cgroup_from_root(ns->root_cset, cgrp->root,
+ true);
return kernfs_path_from_node(cgrp->kn, root->kn, buf, buflen);
}
@@ -2749,7 +2752,7 @@ void cgroup_migrate_add_src(struct css_set *src_cset,
if (src_cset->dead)
return;
- src_cgrp = cset_cgroup_from_root(src_cset, dst_cgrp->root);
+ src_cgrp = cset_cgroup_from_root(src_cset, dst_cgrp->root, true);
if (!list_empty(&src_cset->mg_preload_node))
return;
--
2.27.0
More information about the Devel
mailing list