|
@@ -76,6 +76,12 @@ enum {
|
|
|
CSS_REMOVED, /* This CSS is dead */
|
|
|
};
|
|
|
|
|
|
+/* Caller must verify that the css is not for root cgroup */
|
|
|
+static inline void __css_get(struct cgroup_subsys_state *css, int count)
|
|
|
+{
|
|
|
+ atomic_add(count, &css->refcnt);
|
|
|
+}
|
|
|
+
|
|
|
/*
|
|
|
* Call css_get() to hold a reference on the css; it can be used
|
|
|
* for a reference obtained via:
|
|
@@ -87,7 +93,7 @@ static inline void css_get(struct cgroup_subsys_state *css)
|
|
|
{
|
|
|
/* We don't need to reference count the root state */
|
|
|
if (!test_bit(CSS_ROOT, &css->flags))
|
|
|
- atomic_inc(&css->refcnt);
|
|
|
+ __css_get(css, 1);
|
|
|
}
|
|
|
|
|
|
static inline bool css_is_removed(struct cgroup_subsys_state *css)
|
|
@@ -118,11 +124,11 @@ static inline bool css_tryget(struct cgroup_subsys_state *css)
|
|
|
* css_get() or css_tryget()
|
|
|
*/
|
|
|
|
|
|
-extern void __css_put(struct cgroup_subsys_state *css);
|
|
|
+extern void __css_put(struct cgroup_subsys_state *css, int count);
|
|
|
static inline void css_put(struct cgroup_subsys_state *css)
|
|
|
{
|
|
|
if (!test_bit(CSS_ROOT, &css->flags))
|
|
|
- __css_put(css);
|
|
|
+ __css_put(css, 1);
|
|
|
}
|
|
|
|
|
|
/* bits in struct cgroup flags field */
|