From: Hu Tao Date: Mon, 7 Mar 2011 03:49:12 +0000 (+0800) Subject: Don't return an error on failure to create blkio controller X-Git-Tag: CVE-2011-1486~33 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=ae5155768f5bc7af6450c657e1f2fe1f4a129c57;p=thirdparty%2Flibvirt.git 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 Signed-off-by: Eric Blake --- diff --git a/src/util/cgroup.c b/src/util/cgroup.c index 9a41a62dc3..afe873118a 100644 --- a/src/util/cgroup.c +++ b/src/util/cgroup.c @@ -527,9 +527,20 @@ static int virCgroupMakeGroup(virCgroupPtr parent, virCgroupPtr group, if (access(path, F_OK) != 0) { if (!create || mkdir(path, 0755) < 0) { - rc = -errno; - VIR_FREE(path); - break; + /* 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; + VIR_FREE(path); + break; + } } if (group->controllers[VIR_CGROUP_CONTROLLER_CPUSET].mountPoint != NULL && (i == VIR_CGROUP_CONTROLLER_CPUSET ||