Currently, the controllers argument to virCgroupDetect acts both as
a result filter and a required controller specification, which is
a bit overloaded. If both functionalities are needed, it would be
better to have them seperated into a filter and a requirement mask.
The only situation where it is used today is to ensure that only
CPU related controllers are used for the VCPU directories. But here
we clearly do not want to enforce the existence of cpu, cpuacct and
specifically not cpuset at the same time.
This commit changes the semantics of controllers to "filter only".
Should a required mask ever be needed, more work will have to be done.
Signed-off-by: Viktor Mihajlovski <mihajlov(a)linux.vnet.ibm.com>
---
src/util/vircgroup.c | 8 ++++----
tests/vircgrouptest.c | 4 ++--
2 files changed, 6 insertions(+), 6 deletions(-)
diff --git a/src/util/vircgroup.c b/src/util/vircgroup.c
index cc144a5..4fe0944 100644
--- a/src/util/vircgroup.c
+++ b/src/util/vircgroup.c
@@ -375,18 +375,18 @@ static int virCgroupDetect(virCgroupPtr group,
}
if (controllers >= 0) {
- VIR_DEBUG("Validating controllers %d", controllers);
+ VIR_DEBUG("Filtering controllers %d", controllers);
for (i = 0; i < VIR_CGROUP_CONTROLLER_LAST; i++) {
VIR_DEBUG("Controller '%s' wanted=%s, mount='%s'",
virCgroupControllerTypeToString(i),
(1 << i) & controllers ? "yes" :
"no",
NULLSTR(group->controllers[i].mountPoint));
if (((1 << i) & controllers)) {
- /* Ensure requested controller is present */
+ /* Remove non-existent controllers */
if (!group->controllers[i].mountPoint) {
- VIR_DEBUG("Requested controlled '%s' not mounted",
+ VIR_DEBUG("Requested controller '%s' not mounted,
ignoring",
virCgroupControllerTypeToString(i));
- return -ENOENT;
+ controllers &= ~(1 << i);
}
} else {
/* Check whether a request to disable a controller
diff --git a/tests/vircgrouptest.c b/tests/vircgrouptest.c
index b00a187..262eb8b 100644
--- a/tests/vircgrouptest.c
+++ b/tests/vircgrouptest.c
@@ -176,7 +176,7 @@ static int testCgroupNewForDriver(const void *args ATTRIBUTE_UNUSED)
/* Asking for impossible combination since devices is not mounted */
if ((rv = virCgroupNewDriver("lxc", true,
(1 << VIR_CGROUP_CONTROLLER_DEVICES),
- &cgroup)) != -ENOENT) {
+ &cgroup)) != -ENXIO) {
fprintf(stderr, "Should not have created LXC cgroup: %d\n", -rv);
goto cleanup;
}
@@ -280,7 +280,7 @@ static int testCgroupNewForPartition(const void *args
ATTRIBUTE_UNUSED)
/* Asking for impossible combination since devices is not mounted */
if ((rv = virCgroupNewPartition("/virtualmachines", true,
(1 << VIR_CGROUP_CONTROLLER_DEVICES),
- &cgroup)) != -ENOENT) {
+ &cgroup)) != -ENXIO) {
fprintf(stderr, "Should not have created /virtualmachines cgroup:
%d\n", -rv);
goto cleanup;
}
--
1.7.9.5
Show replies by date
On 23.05.2013 15:26, Viktor Mihajlovski wrote:
Currently, the controllers argument to virCgroupDetect acts both as
a result filter and a required controller specification, which is
a bit overloaded. If both functionalities are needed, it would be
better to have them seperated into a filter and a requirement mask.
The only situation where it is used today is to ensure that only
CPU related controllers are used for the VCPU directories. But here
we clearly do not want to enforce the existence of cpu, cpuacct and
specifically not cpuset at the same time.
This commit changes the semantics of controllers to "filter only".
Should a required mask ever be needed, more work will have to be done.
Signed-off-by: Viktor Mihajlovski <mihajlov(a)linux.vnet.ibm.com>
---
src/util/vircgroup.c | 8 ++++----
tests/vircgrouptest.c | 4 ++--
2 files changed, 6 insertions(+), 6 deletions(-)
ACKed and pushed.
Michal
On 05/24/2013 12:20 PM, Michal Privoznik wrote:
ACKed and pushed.
Michal
Thanks, glad it made it before freeze....
--
Mit freundlichen Grüßen/Kind Regards
Viktor Mihajlovski
IBM Deutschland Research & Development GmbH
Vorsitzender des Aufsichtsrats: Martina Köderitz
Geschäftsführung: Dirk Wittkopp
Sitz der Gesellschaft: Böblingen
Registergericht: Amtsgericht Stuttgart, HRB 243294