Michal Koutný 6f92e9
From: Tejun Heo <tj@kernel.org>
Michal Koutný 6f92e9
Date: Fri, 23 Sep 2022 07:23:06 -1000
Michal Koutný 6f92e9
Subject: cgroup: Make cgroup_get_from_id() prettier
Michal Koutný 6f92e9
MIME-Version: 1.0
Michal Koutný 6f92e9
Content-Type: text/plain; charset=UTF-8
Michal Koutný 6f92e9
Content-Transfer-Encoding: 8bit
Michal Koutný 6f92e9
Git-commit: 7e1eb5437d3c3fdb61d45378579aab383cafc694
Michal Koutný 6f92e9
Patch-mainline: v6.1-rc1
Michal Koutný 6f92e9
References: bsc#1205650
Michal Koutný 6f92e9
Michal Koutný 6f92e9
After merging 836ac87d ("cgroup: fix cgroup_get_from_id") into for-6.1, its
Michal Koutný 6f92e9
combination with two commits in for-6.1 - 4534dee9 ("cgroup: cgroup: Honor
Michal Koutný 6f92e9
caller's cgroup NS when resolving cgroup id") and fa7e439c ("cgroup:
Michal Koutný 6f92e9
Homogenize cgroup_get_from_id() return value") - makes the gotos in the
Michal Koutný 6f92e9
error handling path too ugly while not adding anything of value.
Michal Koutný 6f92e9
Michal Koutný 6f92e9
All that the gotos are saving is one extra kernfs_put() call. Let's remove
Michal Koutný 6f92e9
the gotos and perform error returns directly.
Michal Koutný 6f92e9
Michal Koutný 6f92e9
Signed-off-by: Tejun Heo <tj@kernel.org>
Michal Koutný 6f92e9
Cc: Ming Lei <ming.lei@redhat.com>
Michal Koutný 6f92e9
Cc: Michal Koutný <mkoutny@suse.com>
Michal Koutný 6f92e9
Michal Koutný 6f92e9
Acked-by: Michal Koutný <mkoutny@suse.com>
Michal Koutný 6f92e9
---
Michal Koutný 6f92e9
 kernel/cgroup/cgroup.c | 19 ++++++++++---------
Michal Koutný 6f92e9
 1 file changed, 10 insertions(+), 9 deletions(-)
Michal Koutný 6f92e9
Michal Koutný 6f92e9
diff --git a/kernel/cgroup/cgroup.c b/kernel/cgroup/cgroup.c
Michal Koutný 6f92e9
index 0d93cd17548c..c1f1ef6090da 100644
Michal Koutný 6f92e9
--- a/kernel/cgroup/cgroup.c
Michal Koutný 6f92e9
+++ b/kernel/cgroup/cgroup.c
Michal Koutný 6f92e9
@@ -6066,14 +6066,16 @@ void cgroup_path_from_kernfs_id(u64 id, char *buf, size_t buflen)
Michal Koutný 6f92e9
 struct cgroup *cgroup_get_from_id(u64 id)
Michal Koutný 6f92e9
 {
Michal Koutný 6f92e9
 	struct kernfs_node *kn;
Michal Koutný 6f92e9
-	struct cgroup *cgrp = NULL, *root_cgrp;
Michal Koutný 6f92e9
+	struct cgroup *cgrp, *root_cgrp;
Michal Koutný 6f92e9
 
Michal Koutný 6f92e9
 	kn = kernfs_find_and_get_node_by_id(cgrp_dfl_root.kf_root, id);
Michal Koutný 6f92e9
 	if (!kn)
Michal Koutný 6f92e9
-		goto out;
Michal Koutný 6f92e9
+		return ERR_PTR(-ENOENT);
Michal Koutný 6f92e9
 
Michal Koutný 6f92e9
-	if (kernfs_type(kn) != KERNFS_DIR)
Michal Koutný 6f92e9
-		goto put;
Michal Koutný 6f92e9
+	if (kernfs_type(kn) != KERNFS_DIR) {
Michal Koutný 6f92e9
+		kernfs_put(kn);
Michal Koutný 6f92e9
+		return ERR_PTR(-ENOENT);
Michal Koutný 6f92e9
+	}
Michal Koutný 6f92e9
 
Michal Koutný 6f92e9
 	rcu_read_lock();
Michal Koutný 6f92e9
 
Michal Koutný 6f92e9
@@ -6082,21 +6084,20 @@ struct cgroup *cgroup_get_from_id(u64 id)
Michal Koutný 6f92e9
 		cgrp = NULL;
Michal Koutný 6f92e9
 
Michal Koutný 6f92e9
 	rcu_read_unlock();
Michal Koutný 6f92e9
-put:
Michal Koutný 6f92e9
 	kernfs_put(kn);
Michal Koutný 6f92e9
 
Michal Koutný 6f92e9
 	if (!cgrp)
Michal Koutný 6f92e9
-		goto out;
Michal Koutný 6f92e9
+		return ERR_PTR(-ENOENT);
Michal Koutný 6f92e9
 
Michal Koutný 6f92e9
 	spin_lock_irq(&css_set_lock);
Michal Koutný 6f92e9
 	root_cgrp = current_cgns_cgroup_from_root(&cgrp_dfl_root);
Michal Koutný 6f92e9
 	spin_unlock_irq(&css_set_lock);
Michal Koutný 6f92e9
 	if (!cgroup_is_descendant(cgrp, root_cgrp)) {
Michal Koutný 6f92e9
 		cgroup_put(cgrp);
Michal Koutný 6f92e9
-		cgrp = NULL;
Michal Koutný 6f92e9
+		return ERR_PTR(-ENOENT);
Michal Koutný 6f92e9
 	}
Michal Koutný 6f92e9
-out:
Michal Koutný 6f92e9
-	return cgrp ?: ERR_PTR(-ENOENT);
Michal Koutný 6f92e9
+
Michal Koutný 6f92e9
+	return cgrp;
Michal Koutný 6f92e9
 }
Michal Koutný 6f92e9
 EXPORT_SYMBOL_GPL(cgroup_get_from_id);
Michal Koutný 6f92e9
 
Michal Koutný 6f92e9