Commit bfe1cb2e by Serge Hallyn Committed by Stéphane Graber

cgmanager: detect whether cgmanager supports name= subsystems

On older cgmanager the support was broken. So rather than fail container starts altogether, just keep the old lxc behavior in this case by not using name= subsystems. Signed-off-by: 's avatarSerge Hallyn <serge.hallyn@ubuntu.com> Acked-by: 's avatarStéphane Graber <stgraber@ubuntu.com>
parent 631bf46d
......@@ -51,6 +51,9 @@
#include "start.h"
#include "state.h"
#define CGM_SUPPORTS_GET_ABS 3
#define CGM_SUPPORTS_NAMED 4
#ifdef HAVE_CGMANAGER
lxc_log_define(lxc_cgmanager, lxc);
......@@ -113,6 +116,7 @@ static struct cgroup_ops cgmanager_ops;
static int nr_subsystems;
static char **subsystems;
static bool dbus_threads_initialized = false;
static void cull_user_controllers(void);
static void cgm_dbus_disconnect(void)
{
......@@ -172,6 +176,8 @@ static bool cgm_dbus_connect(void)
cgm_dbus_disconnect();
return false;
}
if (api_version < CGM_SUPPORTS_NAMED)
cull_user_controllers();
return true;
}
......@@ -617,7 +623,7 @@ static const char *cgm_get_cgroup(void *hdata, const char *subsystem)
#if HAVE_CGMANAGER_GET_PID_CGROUP_ABS_SYNC
static inline bool abs_cgroup_supported(void) {
return api_version >= 3;
return api_version >= CGM_SUPPORTS_GET_ABS;
}
#else
static inline bool abs_cgroup_supported(void) {
......@@ -813,6 +819,19 @@ static void free_subsystems(void)
nr_subsystems = 0;
}
static void cull_user_controllers(void)
{
int i, j;
for (i = 0; i < nr_subsystems; i++) {
if (strncmp(subsystems[i], "name=", 5) != 0)
continue;
for (j = i; j < nr_subsystems-1; j++)
subsystems[j] = subsystems[j+1];
nr_subsystems--;
}
}
static bool collect_subsytems(void)
{
char *line = NULL;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment