From dbeaa7e666149e435c5e2dd0e86af9986d78bbc1 Mon Sep 17 00:00:00 2001 From: Boris Fiuczynski Date: Thu, 8 Dec 2016 14:24:18 +0100 Subject: [PATCH] cgroup: reduce complexity of controller disabling This patch reduces the complexity of the filtering algorithm in virCgroupDetect by first correcting the controller mask and then checking for potential co-mounts without any correlating controller mask modifications. If you agree that this patch removes complexity and improves readability it could simply be squashed into the first patch of this series. Signed-off-by: Boris Fiuczynski Reviewed-by: Bjoern Walk Reviewed-by: Marc Hartmayer --- src/util/vircgroup.c | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/src/util/vircgroup.c b/src/util/vircgroup.c index b9d8262aa8..80ce43c1ff 100644 --- a/src/util/vircgroup.c +++ b/src/util/vircgroup.c @@ -656,11 +656,8 @@ virCgroupDetect(virCgroupPtr group, if (controllers >= 0) { VIR_DEBUG("Filtering controllers %d", controllers); + /* First mark requested but non-existing controllers to be ignored */ 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)) { /* Remove non-existent controllers */ if (!group->controllers[i].mountPoint) { @@ -668,12 +665,15 @@ virCgroupDetect(virCgroupPtr group, virCgroupControllerTypeToString(i)); controllers &= ~(1 << i); } - } else { - if (!group->controllers[i].mountPoint) { - /* without controller co-mounting is impossible */ - continue; - } - + } + } + 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) && + group->controllers[i].mountPoint) { /* Check whether a request to disable a controller * clashes with co-mounting of controllers */ for (j = 0; j < VIR_CGROUP_CONTROLLER_LAST; j++) { -- GitLab