[lxc-devel] [PATCH] cgmanager: slow down there (don't always grab abs cgroup path)

Serge Hallyn serge.hallyn at ubuntu.com
Tue May 20 16:47:17 UTC 2014


When I converted attach and enter to using move_pid_abs, these needed
to use the new get_pid_cgroup_abs method to get an absolute path.  But
for some inexplicable reason I also converted the functions which get
and set cgroup properties to use the absolute paths.  These are simply
not compatible with the cgmanager set_value and get_value methods.
This breaks for instance lxc-test-cgpath.

So undo that.  With this patch lxc-test-cgpath, lxc-test-autotest,
and lxc-test-concurrent once again pass in a nested container.

Signed-off-by: Serge Hallyn <serge.hallyn at ubuntu.com>
---
 src/lxc/cgmanager.c | 32 ++++++++++++++++----------------
 1 file changed, 16 insertions(+), 16 deletions(-)

diff --git a/src/lxc/cgmanager.c b/src/lxc/cgmanager.c
index 9b06d31..3a5525a 100644
--- a/src/lxc/cgmanager.c
+++ b/src/lxc/cgmanager.c
@@ -714,14 +714,13 @@ static int cgm_get(const char *filename, char *value, size_t len, const char *na
 		return -1;
 	*key = '\0';
 
-	if (!cgm_dbus_connect()) {
-		ERROR("Error connecting to cgroup manager");
+	/* use the command interface to look for the cgroup */
+	cgroup = lxc_cmd_get_cgroup_path(name, lxcpath, controller);
+	if (!cgroup)
 		return -1;
-	}
 
-	cgroup = try_get_abs_cgroup(name, lxcpath, controller);
-	if (!cgroup) {
-		cgm_dbus_disconnect();
+	if (!cgm_dbus_connect()) {
+		ERROR("Error connecting to cgroup manager");
 		return -1;
 	}
 
@@ -734,12 +733,12 @@ static int cgm_get(const char *filename, char *value, size_t len, const char *na
 		NihError *nerr;
 		nerr = nih_error_get();
 		nih_free(nerr);
-		free_abs_cgroup(cgroup);
+		free(cgroup);
 		cgm_dbus_disconnect();
 		return -1;
 	}
 	cgm_dbus_disconnect();
-	free_abs_cgroup(cgroup);
+	free(cgroup);
 	newlen = strlen(result);
 	if (!len || !value) {
 		// user queries the size
@@ -790,21 +789,22 @@ static int cgm_set(const char *filename, const char *value, const char *name, co
 		return -1;
 	*key = '\0';
 
-	if (!cgm_dbus_connect()) {
-		ERROR("Error connecting to cgroup manager");
-		free(cgroup);
-		return false;
-	}
-	cgroup = try_get_abs_cgroup(name, lxcpath, controller);
+	/* use the command interface to look for the cgroup */
+	cgroup = lxc_cmd_get_cgroup_path(name, lxcpath, controller);
 	if (!cgroup) {
 		ERROR("Failed to get cgroup for controller %s for %s:%s",
 			controller, lxcpath, name);
-		cgm_dbus_disconnect();
 		return -1;
 	}
+
+	if (!cgm_dbus_connect()) {
+		ERROR("Error connecting to cgroup manager");
+		free(cgroup);
+		return false;
+	}
 	ret = cgm_do_set(controller, filename, cgroup, value);
 	cgm_dbus_disconnect();
-	free_abs_cgroup(cgroup);
+	free(cgroup);
 	return ret;
 }
 
-- 
1.9.1



More information about the lxc-devel mailing list