X-Git-Url: http://git.cascardo.info/?a=blobdiff_plain;f=kernel%2Fevents%2Fcore.c;h=d7d71d6ec97278cf60fa5b13e79a80bff27b6af2;hb=bcc66c0b8881f88459f9ac21038455bcafacdc6e;hp=f85c0154b333a02c6a611cf8eca55362ab7f7eaf;hpb=8e53ed10f871a077cc61374c74e0bbab25264208;p=cascardo%2Flinux.git diff --git a/kernel/events/core.c b/kernel/events/core.c index f85c0154b333..d7d71d6ec972 100644 --- a/kernel/events/core.c +++ b/kernel/events/core.c @@ -253,9 +253,9 @@ perf_cgroup_match(struct perf_event *event) return !event->cgrp || event->cgrp == cpuctx->cgrp; } -static inline void perf_get_cgroup(struct perf_event *event) +static inline bool perf_tryget_cgroup(struct perf_event *event) { - css_get(&event->cgrp->css); + return css_tryget(&event->cgrp->css); } static inline void perf_put_cgroup(struct perf_event *event) @@ -484,7 +484,11 @@ static inline int perf_cgroup_connect(int fd, struct perf_event *event, event->cgrp = cgrp; /* must be done before we fput() the file */ - perf_get_cgroup(event); + if (!perf_tryget_cgroup(event)) { + event->cgrp = NULL; + ret = -ENOENT; + goto out; + } /* * all events in a group must monitor