]> git.kernelconcepts.de Git - karo-tx-linux.git/blobdiff - kernel/events/core.c
cgroup: improve css_from_dir() into css_tryget_from_dir()
[karo-tx-linux.git] / kernel / events / core.c
index 56003c6edfd38c03e8dd523f1efb01d99bcf2e84..a3c3ab50271af3453845c1bb925fe03e811e0b1b 100644 (file)
@@ -342,7 +342,7 @@ struct perf_cgroup {
 static inline struct perf_cgroup *
 perf_cgroup_from_task(struct task_struct *task)
 {
-       return container_of(task_css(task, perf_subsys_id),
+       return container_of(task_css(task, perf_event_cgrp_id),
                            struct perf_cgroup, css);
 }
 
@@ -370,11 +370,6 @@ perf_cgroup_match(struct perf_event *event)
                                    event->cgrp->css.cgroup);
 }
 
-static inline bool perf_tryget_cgroup(struct perf_event *event)
-{
-       return css_tryget(&event->cgrp->css);
-}
-
 static inline void perf_put_cgroup(struct perf_event *event)
 {
        css_put(&event->cgrp->css);
@@ -593,9 +588,7 @@ static inline int perf_cgroup_connect(int fd, struct perf_event *event,
        if (!f.file)
                return -EBADF;
 
-       rcu_read_lock();
-
-       css = css_from_dir(f.file->f_dentry, &perf_subsys);
+       css = css_tryget_from_dir(f.file->f_dentry, &perf_event_cgrp_subsys);
        if (IS_ERR(css)) {
                ret = PTR_ERR(css);
                goto out;
@@ -604,13 +597,6 @@ static inline int perf_cgroup_connect(int fd, struct perf_event *event,
        cgrp = container_of(css, struct perf_cgroup, css);
        event->cgrp = cgrp;
 
-       /* must be done before we fput() the file */
-       if (!perf_tryget_cgroup(event)) {
-               event->cgrp = NULL;
-               ret = -ENOENT;
-               goto out;
-       }
-
        /*
         * all events in a group must monitor
         * the same cgroup because a task belongs
@@ -621,7 +607,6 @@ static inline int perf_cgroup_connect(int fd, struct perf_event *event,
                ret = -EINVAL;
        }
 out:
-       rcu_read_unlock();
        fdput(f);
        return ret;
 }
@@ -8055,9 +8040,7 @@ static void perf_cgroup_exit(struct cgroup_subsys_state *css,
        task_function_call(task, __perf_cgroup_move, task);
 }
 
-struct cgroup_subsys perf_subsys = {
-       .name           = "perf_event",
-       .subsys_id      = perf_subsys_id,
+struct cgroup_subsys perf_event_cgrp_subsys = {
        .css_alloc      = perf_cgroup_css_alloc,
        .css_free       = perf_cgroup_css_free,
        .exit           = perf_cgroup_exit,