Use guards to reduce gotos and simplify control flow. Signed-off-by: Peter Zijlstra (Intel) <peterz@xxxxxxxxxxxxx> --- include/linux/file.h | 2 +- kernel/events/core.c | 19 ++++++++----------- 2 files changed, 9 insertions(+), 12 deletions(-) --- a/kernel/events/core.c +++ b/kernel/events/core.c @@ -936,22 +936,20 @@ static inline int perf_cgroup_connect(in { struct perf_cgroup *cgrp; struct cgroup_subsys_state *css; - struct fd f = fdget(fd); - int ret = 0; + int ret; + CLASS(fd, f)(fd); if (!f.file) return -EBADF; css = css_tryget_online_from_dir(f.file->f_path.dentry, &perf_event_cgrp_subsys); - if (IS_ERR(css)) { - ret = PTR_ERR(css); - goto out; - } + if (IS_ERR(css)) + return PTR_ERR(css); ret = perf_cgroup_ensure_storage(event, css); if (ret) - goto out; + return ret; cgrp = container_of(css, struct perf_cgroup, css); event->cgrp = cgrp; @@ -963,11 +961,10 @@ static inline int perf_cgroup_connect(in */ if (group_leader && group_leader->cgrp != cgrp) { perf_detach_cgroup(event); - ret = -EINVAL; + return -EINVAL; } -out: - fdput(f); - return ret; + + return 0; } static inline void