extern struct cgroup_ops *cgfsng_ops_init(void);
extern struct cgroup_ops *cgm_ops_init(void);
-__attribute__((constructor))
-void cgroup_ops_init(void)
+__attribute__((constructor)) void cgroup_ops_init(void)
{
if (ops) {
INFO("cgroup driver %s", ops->name);
}
DEBUG("cgroup_init");
- #if HAVE_CGMANAGER
+#if HAVE_CGMANAGER
ops = cgm_ops_init();
- #endif
+#endif
if (!ops)
ops = cgfsng_ops_init();
if (!ops)
bool cgroup_init(struct lxc_handler *handler)
{
if (handler->cgroup_data) {
- ERROR("cgroup_init called on already inited handler");
+ ERROR("cgroup_init called on already initialized handler");
return true;
}
INFO("cgroup driver %s initing for %s", ops->name, handler->name);
handler->cgroup_data = ops->init(handler->name);
}
+
return handler->cgroup_data != NULL;
}
}
}
-/* Create the container cgroups for all requested controllers */
+/* Create the container cgroups for all requested controllers. */
bool cgroup_create(struct lxc_handler *handler)
{
if (ops)
return ops->create(handler->cgroup_data);
+
return false;
}
-/*
- * Enter the container init into its new cgroups for all
- * requested controllers
- */
+/* Enter the container init into its new cgroups for all requested controllers. */
bool cgroup_enter(struct lxc_handler *handler)
{
if (ops)
return ops->enter(handler->cgroup_data, handler->pid);
+
return false;
}
{
if (ops && ops->create_legacy)
return ops->create_legacy(handler->cgroup_data, handler->pid);
+
return true;
}
-const char *cgroup_get_cgroup(struct lxc_handler *handler, const char *subsystem)
+const char *cgroup_get_cgroup(struct lxc_handler *handler,
+ const char *subsystem)
{
if (ops)
return ops->get_cgroup(handler->cgroup_data, subsystem);
+
return NULL;
}
{
if (ops)
return ops->escape(handler->cgroup_data);
+
return false;
}
{
if (ops)
return ops->unfreeze(handler->cgroup_data);
+
return false;
}
if (ops)
return ops->setup_limits(handler->cgroup_data,
&handler->conf->cgroup, with_devices);
+
return false;
}
{
if (ops && ops->chown)
return ops->chown(handler->cgroup_data, handler->conf);
+
return true;
}
bool cgroup_mount(const char *root, struct lxc_handler *handler, int type)
{
- if (ops) {
+ if (ops)
return ops->mount_cgroup(handler->cgroup_data, root, type);
- }
+
return false;
}
if (ops->nrtasks)
return ops->nrtasks(handler->cgroup_data);
else
- WARN("CGROUP driver %s doesn't implement nrtasks", ops->name);
+ WARN("cgroup driver \"%s\" doesn't implement nrtasks", ops->name);
}
+
return -1;
}
{
if (ops)
return ops->attach(name, lxcpath, pid);
+
return false;
}
-int lxc_cgroup_set(const char *filename, const char *value, const char *name, const char *lxcpath)
+int lxc_cgroup_set(const char *filename, const char *value, const char *name,
+ const char *lxcpath)
{
if (ops)
return ops->set(filename, value, name, lxcpath);
+
return -1;
}
-int lxc_cgroup_get(const char *filename, char *value, size_t len, const char *name, const char *lxcpath)
+int lxc_cgroup_get(const char *filename, char *value, size_t len,
+ const char *name, const char *lxcpath)
{
if (ops)
return ops->get(filename, value, len, name, lxcpath);
+
return -1;
}
-void cgroup_disconnect(void)
-{
+void cgroup_disconnect(void) {
if (ops && ops->disconnect)
ops->disconnect();
}
point = cg + strlen(cg) - strlen(INIT_SCOPE);
if (point < cg)
return;
+
if (strcmp(point, INIT_SCOPE) == 0) {
if (point == cg)
- *(point+1) = '\0';
+ *(point + 1) = '\0';
else
*point = '\0';
}
}
-/*
- * Return true if this is a subsystem which we cannot do
- * without.
+/* Return true if this is a subsystem which we cannot do without.
*
- * systemd is questionable here. The way callers currently
- * use this, if systemd is not mounted then it will be ignored.
- * But if systemd is mounted, then it must be setup so that lxc
- * can create cgroups in it, else containers will fail.
+ * systemd is questionable here. The way callers currently use this, if systemd
+ * is not mounted then it will be ignored. But if systemd is mounted, then it
+ * must be setup so that lxc can create cgroups in it, else containers will
+ * fail.
*/
bool is_crucial_cgroup_subsystem(const char *s)
{
if (strcmp(s, "systemd") == 0)
return true;
+
if (strcmp(s, "name=systemd") == 0)
return true;
+
if (strcmp(s, "freezer") == 0)
return true;
+
return false;
}