forked from pool/libvirt
50 lines
1.9 KiB
Diff
50 lines
1.9 KiB
Diff
|
commit c2cf5f1c2abc81d607abe34bf5dc4c615a9b8b4d
|
||
|
Author: Daniel P. Berrange <berrange@redhat.com>
|
||
|
Date: Thu May 16 18:47:07 2013 +0100
|
||
|
|
||
|
Fix failure to detect missing cgroup partitions
|
||
|
|
||
|
Change bbe97ae968eba60b71e0066d49f9fc909966d9d6 caused the
|
||
|
QEMU driver to ignore ENOENT errors from cgroups, in order
|
||
|
to cope with missing /proc/cgroups. This is not good though
|
||
|
because many other things can cause ENOENT and should not
|
||
|
be ignored. The callers expect to see ENXIO when cgroups
|
||
|
are not present, so adjust the code to report that errno
|
||
|
when /proc/cgroups is missing
|
||
|
|
||
|
Signed-off-by: Daniel P. Berrange <berrange@redhat.com>
|
||
|
|
||
|
Index: libvirt-1.0.5/src/qemu/qemu_cgroup.c
|
||
|
===================================================================
|
||
|
--- libvirt-1.0.5.orig/src/qemu/qemu_cgroup.c
|
||
|
+++ libvirt-1.0.5/src/qemu/qemu_cgroup.c
|
||
|
@@ -415,8 +415,7 @@ int qemuInitCgroup(virQEMUDriverPtr driv
|
||
|
if (rc != 0) {
|
||
|
if (rc == -ENXIO ||
|
||
|
rc == -EPERM ||
|
||
|
- rc == -EACCES ||
|
||
|
- rc == -ENOENT) { /* No cgroups mounts == success */
|
||
|
+ rc == -EACCES) { /* No cgroups mounts == success */
|
||
|
VIR_DEBUG("No cgroups present/configured/accessible, ignoring error");
|
||
|
goto done;
|
||
|
}
|
||
|
Index: libvirt-1.0.5/src/util/vircgroup.c
|
||
|
===================================================================
|
||
|
--- libvirt-1.0.5.orig/src/util/vircgroup.c
|
||
|
+++ libvirt-1.0.5/src/util/vircgroup.c
|
||
|
@@ -1110,8 +1110,13 @@ static int virCgroupPartitionNeedsEscapi
|
||
|
path[0] == '.')
|
||
|
return 1;
|
||
|
|
||
|
- if (!(fp = fopen("/proc/cgroups", "r")))
|
||
|
+ if (!(fp = fopen("/proc/cgroups", "r"))) {
|
||
|
+ /* The API contract is that we return ENXIO
|
||
|
+ * if cgroups are not available on a host */
|
||
|
+ if (errno == ENOENT)
|
||
|
+ errno = ENXIO;
|
||
|
return -errno;
|
||
|
+ }
|
||
|
|
||
|
/*
|
||
|
* Data looks like this:
|