From 53d9a924974390e6f58021aa56ef960c724fc1b6 Mon Sep 17 00:00:00 2001 From: "Daniel P. Berrange" Date: Fri, 31 Jul 2009 14:37:25 +0100 Subject: [PATCH] Don't try to activate cgroups if not present for LXC * src/lxc_controller.c: Don't throw error in LXC startup if the cgroups driver mount isn't available. Improve error logging for resource setup --- src/lxc_controller.c | 51 +++++++++++++++++++++++++++++++------------- 1 file changed, 36 insertions(+), 15 deletions(-) diff --git a/src/lxc_controller.c b/src/lxc_controller.c index 9ad48a7d13..8d11238a0e 100644 --- a/src/lxc_controller.c +++ b/src/lxc_controller.c @@ -84,25 +84,38 @@ static int lxcSetContainerResources(virDomainDefPtr def) rc = virCgroupForDriver("lxc", &driver, 1, 0); if (rc != 0) { - lxcError(NULL, NULL, VIR_ERR_INTERNAL_ERROR, "%s", - _("Unable to get cgroup for driver")); + /* Skip all if no driver cgroup is configured */ + if (rc == -ENXIO || rc == -ENOENT) + return 0; + + virReportSystemError(NULL, -rc, "%s", + _("Unable to get cgroup for driver")); return rc; } rc = virCgroupForDomain(driver, def->name, &cgroup, 1); if (rc != 0) { - lxcError(NULL, NULL, VIR_ERR_INTERNAL_ERROR, - _("Unable to create cgroup for domain %s"), def->name); + virReportSystemError(NULL, -rc, + _("Unable to create cgroup for domain %s"), + def->name); goto cleanup; } rc = virCgroupSetMemory(cgroup, def->maxmem); - if (rc != 0) - goto out; + if (rc != 0) { + virReportSystemError(NULL, -rc, + _("Unable to set memory limit for domain %s"), + def->name); + goto cleanup; + } rc = virCgroupDenyAllDevices(cgroup); - if (rc != 0) - goto out; + if (rc != 0) { + virReportSystemError(NULL, -rc, + _("Unable to deny devices for domain %s"), + def->name); + goto cleanup; + } for (i = 0; devices[i].type != 0; i++) { struct cgroup_device_policy *dev = &devices[i]; @@ -110,19 +123,27 @@ static int lxcSetContainerResources(virDomainDefPtr def) dev->type, dev->major, dev->minor); - if (rc != 0) - goto out; + if (rc != 0) { + virReportSystemError(NULL, -rc, + _("Unable to allow device %c:%d:%d for domain %s"), + dev->type, dev->major, dev->minor, def->name); + goto cleanup; + } } rc = virCgroupAllowDeviceMajor(cgroup, 'c', LXC_DEV_MAJ_PTY); - if (rc != 0) - goto out; + if (rc != 0) { + virReportSystemError(NULL, -rc, + _("Unable to allow PYT devices for domain %s"), + def->name); + goto cleanup; + } rc = virCgroupAddTask(cgroup, getpid()); -out: if (rc != 0) { - virReportSystemError(NULL, -rc, "%s", - _("Failed to set lxc resources")); + virReportSystemError(NULL, -rc, + _("Unable to add task %d to cgroup for domain %s"), + getpid(), def->name); } cleanup: -- GitLab