]> Pileus Git - ~andy/linux/commitdiff
cgroup: rename cgroup_subsys_state->dput_work and its callback function
authorTejun Heo <tj@kernel.org>
Tue, 13 Aug 2013 15:01:54 +0000 (11:01 -0400)
committerTejun Heo <tj@kernel.org>
Tue, 13 Aug 2013 15:01:54 +0000 (11:01 -0400)
css (cgroup_subsys_state) will become RCU protected and there will be
two stages which require punting to work item during release.  To
prepare for using the work item for multiple times, rename
css->dput_work to css->destroy_work and css_dput_fn() to
css_free_work_fn() and move work item initialization from css init to
right before the actual usage.

This reorganization doesn't introduce any behavior change.

Signed-off-by: Tejun Heo <tj@kernel.org>
Acked-by: Li Zefan <lizefan@huawei.com>
include/linux/cgroup.h
kernel/cgroup.c

index 8ec5b0f382921de73db4e7282a37e46b764b0b22..12d66fee26f80b1c16c6e60605e72813e858d953 100644 (file)
@@ -80,7 +80,7 @@ struct cgroup_subsys_state {
        struct css_id __rcu *id;
 
        /* Used to put @cgroup->dentry on the last css_put() */
-       struct work_struct dput_work;
+       struct work_struct destroy_work;
 };
 
 /* bits in struct cgroup_subsys_state flags field */
index 49ad96ee08e19c949e6b42d1bba92be761408ba9..0b280978f09755f5f2931a427e79947ac68f8abb 100644 (file)
@@ -4259,10 +4259,10 @@ err:
        return ret;
 }
 
-static void css_dput_fn(struct work_struct *work)
+static void css_free_work_fn(struct work_struct *work)
 {
        struct cgroup_subsys_state *css =
-               container_of(work, struct cgroup_subsys_state, dput_work);
+               container_of(work, struct cgroup_subsys_state, destroy_work);
 
        cgroup_dput(css->cgroup);
 }
@@ -4272,7 +4272,14 @@ static void css_release(struct percpu_ref *ref)
        struct cgroup_subsys_state *css =
                container_of(ref, struct cgroup_subsys_state, refcnt);
 
-       schedule_work(&css->dput_work);
+       /*
+        * css holds an extra ref to @cgrp->dentry which is put on the last
+        * css_put().  dput() requires process context, which css_put() may
+        * be called without.  @css->destroy_work will be used to invoke
+        * dput() asynchronously from css_put().
+        */
+       INIT_WORK(&css->destroy_work, css_free_work_fn);
+       schedule_work(&css->destroy_work);
 }
 
 static void init_cgroup_css(struct cgroup_subsys_state *css,
@@ -4287,14 +4294,6 @@ static void init_cgroup_css(struct cgroup_subsys_state *css,
                css->flags |= CSS_ROOT;
        BUG_ON(cgroup_css(cgrp, ss->subsys_id));
        cgrp->subsys[ss->subsys_id] = css;
-
-       /*
-        * css holds an extra ref to @cgrp->dentry which is put on the last
-        * css_put().  dput() requires process context, which css_put() may
-        * be called without.  @css->dput_work will be used to invoke
-        * dput() asynchronously from css_put().
-        */
-       INIT_WORK(&css->dput_work, css_dput_fn);
 }
 
 /* invoke ->css_online() on a new CSS and mark it online if successful */