Don't return an error on failure to create blkio controller

This patch enables cgroup controllers as much as possible by skipping
the creation of blkio controller when running with old kernels that
doesn't support multi-level directory for blkio controller.

Signed-off-by: Hu Tao <hutao@cn.fujitsu.com>
Signed-off-by: Eric Blake <eblake@redhat.com>
This commit is contained in:
Hu Tao 2011-03-07 11:49:12 +08:00 committed by Eric Blake
parent e36804ce86
commit ae5155768f

View File

@ -527,10 +527,21 @@ static int virCgroupMakeGroup(virCgroupPtr parent, virCgroupPtr group,
if (access(path, F_OK) != 0) { if (access(path, F_OK) != 0) {
if (!create || if (!create ||
mkdir(path, 0755) < 0) { mkdir(path, 0755) < 0) {
/* With a kernel that doesn't support multi-level directory
* for blkio controller, libvirt will fail and disable all
* other controllers even though they are available. So
* treat blkio as unmounted if mkdir fails. */
if (i == VIR_CGROUP_CONTROLLER_BLKIO) {
rc = 0;
VIR_FREE(group->controllers[i].mountPoint);
VIR_FREE(path);
continue;
} else {
rc = -errno; rc = -errno;
VIR_FREE(path); VIR_FREE(path);
break; break;
} }
}
if (group->controllers[VIR_CGROUP_CONTROLLER_CPUSET].mountPoint != NULL && if (group->controllers[VIR_CGROUP_CONTROLLER_CPUSET].mountPoint != NULL &&
(i == VIR_CGROUP_CONTROLLER_CPUSET || (i == VIR_CGROUP_CONTROLLER_CPUSET ||
STREQ(group->controllers[i].mountPoint, group->controllers[VIR_CGROUP_CONTROLLER_CPUSET].mountPoint))) { STREQ(group->controllers[i].mountPoint, group->controllers[VIR_CGROUP_CONTROLLER_CPUSET].mountPoint))) {