On Fri, May 09, 2014 at 05:31:31PM -0400, Tejun Heo wrote: > Implement css_tryget() which tries to grab a cgroup_subsys_state's > reference as long as it already hasn't reached zero. Combined with > the recent css iterator changes to include offline && !released csses > during traversal, this can be used to access csses regardless of its > online state. > > Signed-off-by: Tejun Heo <tj@xxxxxxxxxx> > Cc: Johannes Weiner <hannes@xxxxxxxxxxx> > --- > include/linux/cgroup.h | 16 ++++++++++++++++ > 1 file changed, 16 insertions(+) > > diff --git a/include/linux/cgroup.h b/include/linux/cgroup.h > index c8eb66e..6dd3867 100644 > --- a/include/linux/cgroup.h > +++ b/include/linux/cgroup.h > @@ -111,6 +111,22 @@ static inline void css_get(struct cgroup_subsys_state *css) > } > > /** > + * css_tryget - try to obtain a reference on the specified css > + * @css: target css > + * > + * Obtain a reference on @css unless it already has reached zero and is > + * being released. This function doesn't care whether @css is on or > + * offline. The caller naturally needs to ensure that @css is accessible > + * but doesn't have to be holding a reference on it - IOW, RCU protected > + * access is good enough for this function. Returns %true if a reference > + * count was successfully obtained; %false otherwise. > + */ > +static inline bool css_tryget(struct cgroup_subsys_state *css) > +{ > + return percpu_ref_tryget(&css->refcnt); > +} percpu_ref_tryget() fails once killed (transitioned from per-cpu to atomic mode), but exactly this happens during offlining and so this would actually be equivalent to css_tryget_online(), no? -- To unsubscribe from this list: send the line "unsubscribe cgroups" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html