|
@@ -3771,7 +3771,7 @@ int cgroupstats_build(struct cgroupstats *stats, struct dentry *dentry)
|
|
|
|
|
|
/*
|
|
|
* We aren't being called from kernfs and there's no guarantee on
|
|
|
- * @kn->priv's validity. For this and css_tryget_from_dir(),
|
|
|
+ * @kn->priv's validity. For this and css_tryget_online_from_dir(),
|
|
|
* @kn->priv is RCU safe. Let's do the RCU dancing.
|
|
|
*/
|
|
|
rcu_read_lock();
|
|
@@ -4060,9 +4060,9 @@ err:
|
|
|
* Implemented in kill_css().
|
|
|
*
|
|
|
* 2. When the percpu_ref is confirmed to be visible as killed on all CPUs
|
|
|
- * and thus css_tryget() is guaranteed to fail, the css can be offlined
|
|
|
- * by invoking offline_css(). After offlining, the base ref is put.
|
|
|
- * Implemented in css_killed_work_fn().
|
|
|
+ * and thus css_tryget_online() is guaranteed to fail, the css can be
|
|
|
+ * offlined by invoking offline_css(). After offlining, the base ref is
|
|
|
+ * put. Implemented in css_killed_work_fn().
|
|
|
*
|
|
|
* 3. When the percpu_ref reaches zero, the only possible remaining
|
|
|
* accessors are inside RCU read sections. css_release() schedules the
|
|
@@ -4386,7 +4386,7 @@ static int cgroup_mkdir(struct kernfs_node *parent_kn, const char *name,
|
|
|
|
|
|
/*
|
|
|
* This is called when the refcnt of a css is confirmed to be killed.
|
|
|
- * css_tryget() is now guaranteed to fail.
|
|
|
+ * css_tryget_online() is now guaranteed to fail.
|
|
|
*/
|
|
|
static void css_killed_work_fn(struct work_struct *work)
|
|
|
{
|
|
@@ -4398,8 +4398,8 @@ static void css_killed_work_fn(struct work_struct *work)
|
|
|
mutex_lock(&cgroup_mutex);
|
|
|
|
|
|
/*
|
|
|
- * css_tryget() is guaranteed to fail now. Tell subsystems to
|
|
|
- * initate destruction.
|
|
|
+ * css_tryget_online() is guaranteed to fail now. Tell subsystems
|
|
|
+ * to initate destruction.
|
|
|
*/
|
|
|
offline_css(css);
|
|
|
|
|
@@ -4440,8 +4440,8 @@ static void css_killed_ref_fn(struct percpu_ref *ref)
|
|
|
*
|
|
|
* This function initiates destruction of @css by removing cgroup interface
|
|
|
* files and putting its base reference. ->css_offline() will be invoked
|
|
|
- * asynchronously once css_tryget() is guaranteed to fail and when the
|
|
|
- * reference count reaches zero, @css will be released.
|
|
|
+ * asynchronously once css_tryget_online() is guaranteed to fail and when
|
|
|
+ * the reference count reaches zero, @css will be released.
|
|
|
*/
|
|
|
static void kill_css(struct cgroup_subsys_state *css)
|
|
|
{
|
|
@@ -4462,7 +4462,7 @@ static void kill_css(struct cgroup_subsys_state *css)
|
|
|
/*
|
|
|
* cgroup core guarantees that, by the time ->css_offline() is
|
|
|
* invoked, no new css reference will be given out via
|
|
|
- * css_tryget(). We can't simply call percpu_ref_kill() and
|
|
|
+ * css_tryget_online(). We can't simply call percpu_ref_kill() and
|
|
|
* proceed to offlining css's because percpu_ref_kill() doesn't
|
|
|
* guarantee that the ref is seen as killed on all CPUs on return.
|
|
|
*
|
|
@@ -4478,9 +4478,9 @@ static void kill_css(struct cgroup_subsys_state *css)
|
|
|
*
|
|
|
* css's make use of percpu refcnts whose killing latency shouldn't be
|
|
|
* exposed to userland and are RCU protected. Also, cgroup core needs to
|
|
|
- * guarantee that css_tryget() won't succeed by the time ->css_offline() is
|
|
|
- * invoked. To satisfy all the requirements, destruction is implemented in
|
|
|
- * the following two steps.
|
|
|
+ * guarantee that css_tryget_online() won't succeed by the time
|
|
|
+ * ->css_offline() is invoked. To satisfy all the requirements,
|
|
|
+ * destruction is implemented in the following two steps.
|
|
|
*
|
|
|
* s1. Verify @cgrp can be destroyed and mark it dying. Remove all
|
|
|
* userland visible parts and start killing the percpu refcnts of
|
|
@@ -4574,9 +4574,9 @@ static int cgroup_destroy_locked(struct cgroup *cgrp)
|
|
|
/*
|
|
|
* There are two control paths which try to determine cgroup from
|
|
|
* dentry without going through kernfs - cgroupstats_build() and
|
|
|
- * css_tryget_from_dir(). Those are supported by RCU protecting
|
|
|
- * clearing of cgrp->kn->priv backpointer, which should happen
|
|
|
- * after all files under it have been removed.
|
|
|
+ * css_tryget_online_from_dir(). Those are supported by RCU
|
|
|
+ * protecting clearing of cgrp->kn->priv backpointer, which should
|
|
|
+ * happen after all files under it have been removed.
|
|
|
*/
|
|
|
kernfs_remove(cgrp->kn); /* @cgrp has an extra ref on its kn */
|
|
|
RCU_INIT_POINTER(*(void __rcu __force **)&cgrp->kn->priv, NULL);
|
|
@@ -5173,7 +5173,7 @@ static int __init cgroup_disable(char *str)
|
|
|
__setup("cgroup_disable=", cgroup_disable);
|
|
|
|
|
|
/**
|
|
|
- * css_tryget_from_dir - get corresponding css from the dentry of a cgroup dir
|
|
|
+ * css_tryget_online_from_dir - get corresponding css from a cgroup dentry
|
|
|
* @dentry: directory dentry of interest
|
|
|
* @ss: subsystem of interest
|
|
|
*
|
|
@@ -5181,8 +5181,8 @@ __setup("cgroup_disable=", cgroup_disable);
|
|
|
* to get the corresponding css and return it. If such css doesn't exist
|
|
|
* or can't be pinned, an ERR_PTR value is returned.
|
|
|
*/
|
|
|
-struct cgroup_subsys_state *css_tryget_from_dir(struct dentry *dentry,
|
|
|
- struct cgroup_subsys *ss)
|
|
|
+struct cgroup_subsys_state *css_tryget_online_from_dir(struct dentry *dentry,
|
|
|
+ struct cgroup_subsys *ss)
|
|
|
{
|
|
|
struct kernfs_node *kn = kernfs_node_from_dentry(dentry);
|
|
|
struct cgroup_subsys_state *css = NULL;
|
|
@@ -5204,7 +5204,7 @@ struct cgroup_subsys_state *css_tryget_from_dir(struct dentry *dentry,
|
|
|
if (cgrp)
|
|
|
css = cgroup_css(cgrp, ss);
|
|
|
|
|
|
- if (!css || !css_tryget(css))
|
|
|
+ if (!css || !css_tryget_online(css))
|
|
|
css = ERR_PTR(-ENOENT);
|
|
|
|
|
|
rcu_read_unlock();
|