|
@@ -159,6 +159,16 @@ static void dev_exception_rm(struct dev_cgroup *dev_cgroup,
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+static void __dev_exception_clean(struct dev_cgroup *dev_cgroup)
|
|
|
+{
|
|
|
+ struct dev_exception_item *ex, *tmp;
|
|
|
+
|
|
|
+ list_for_each_entry_safe(ex, tmp, &dev_cgroup->exceptions, list) {
|
|
|
+ list_del_rcu(&ex->list);
|
|
|
+ kfree_rcu(ex, rcu);
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
/**
|
|
|
* dev_exception_clean - frees all entries of the exception list
|
|
|
* @dev_cgroup: dev_cgroup with the exception list to be cleaned
|
|
@@ -167,14 +177,9 @@ static void dev_exception_rm(struct dev_cgroup *dev_cgroup,
|
|
|
*/
|
|
|
static void dev_exception_clean(struct dev_cgroup *dev_cgroup)
|
|
|
{
|
|
|
- struct dev_exception_item *ex, *tmp;
|
|
|
-
|
|
|
lockdep_assert_held(&devcgroup_mutex);
|
|
|
|
|
|
- list_for_each_entry_safe(ex, tmp, &dev_cgroup->exceptions, list) {
|
|
|
- list_del_rcu(&ex->list);
|
|
|
- kfree_rcu(ex, rcu);
|
|
|
- }
|
|
|
+ __dev_exception_clean(dev_cgroup);
|
|
|
}
|
|
|
|
|
|
/*
|
|
@@ -215,9 +220,7 @@ static void devcgroup_css_free(struct cgroup *cgroup)
|
|
|
struct dev_cgroup *dev_cgroup;
|
|
|
|
|
|
dev_cgroup = cgroup_to_devcgroup(cgroup);
|
|
|
- mutex_lock(&devcgroup_mutex);
|
|
|
- dev_exception_clean(dev_cgroup);
|
|
|
- mutex_unlock(&devcgroup_mutex);
|
|
|
+ __dev_exception_clean(dev_cgroup);
|
|
|
kfree(dev_cgroup);
|
|
|
}
|
|
|
|