[libvirt] [PATCH 04/47] vircgroup: detect available backend for cgroup

Fabiano Fidêncio fidencio at redhat.com
Thu Sep 20 06:28:57 UTC 2018


On Tue, Sep 18, 2018 at 5:45 PM, Pavel Hrdina <phrdina at redhat.com> wrote:

> We need to update one test-case because now new cgroup object will be
> created only if there is any cgroup backend available.
>
> Signed-off-by: Pavel Hrdina <phrdina at redhat.com>
> ---
>  src/util/vircgroup.c     | 18 ++++++++++++++++++
>  src/util/vircgrouppriv.h |  3 +++
>  tests/vircgrouptest.c    | 38 +++-----------------------------------
>  3 files changed, 24 insertions(+), 35 deletions(-)
>
> diff --git a/src/util/vircgroup.c b/src/util/vircgroup.c
> index a5478a3fa4..0ffb5db93c 100644
> --- a/src/util/vircgroup.c
> +++ b/src/util/vircgroup.c
> @@ -713,10 +713,28 @@ virCgroupDetect(virCgroupPtr group,
>                  virCgroupPtr parent)
>  {
>      int rc;
> +    size_t i;
> +    virCgroupBackendPtr *backends = virCgroupBackendGetAll();
>
>      VIR_DEBUG("group=%p controllers=%d path=%s parent=%p",
>                group, controllers, path, parent);
>
> +    if (!backends)
> +        return -1;
> +
> +    for (i = 0; i < VIR_CGROUP_BACKEND_TYPE_LAST; i++) {
> +        if (backends[i] && backends[i]->available()) {
> +            group->backend = backends[i];
> +            break;
> +        }
> +    }
> +
> +    if (!group->backend) {
> +        virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
> +                       _("no cgroup backend available"));
> +        return -1;
> +    }
> +
>      if (parent) {
>          if (virCgroupCopyMounts(group, parent) < 0)
>              return -1;
> diff --git a/src/util/vircgrouppriv.h b/src/util/vircgrouppriv.h
> index 046c96c52c..2caa966fee 100644
> --- a/src/util/vircgrouppriv.h
> +++ b/src/util/vircgrouppriv.h
> @@ -30,6 +30,7 @@
>  # define __VIR_CGROUP_PRIV_H__
>
>  # include "vircgroup.h"
> +# include "vircgroupbackend.h"
>
>  struct _virCgroupController {
>      int type;
> @@ -47,6 +48,8 @@ typedef virCgroupController *virCgroupControllerPtr;
>  struct _virCgroup {
>      char *path;
>
> +    virCgroupBackendPtr backend;
> +
>      virCgroupController controllers[VIR_CGROUP_CONTROLLER_LAST];
>  };
>
> diff --git a/tests/vircgrouptest.c b/tests/vircgrouptest.c
> index bbbe6ffbe5..be3143ea52 100644
> --- a/tests/vircgrouptest.c
> +++ b/tests/vircgrouptest.c
> @@ -114,16 +114,6 @@ const char *mountsAllInOne[VIR_CGROUP_CONTROLLER_LAST]
> = {
>      [VIR_CGROUP_CONTROLLER_BLKIO] = "/not/really/sys/fs/cgroup",
>      [VIR_CGROUP_CONTROLLER_SYSTEMD] = NULL,
>  };
> -const char *mountsLogind[VIR_CGROUP_CONTROLLER_LAST] = {
> -    [VIR_CGROUP_CONTROLLER_CPU] = NULL,
> -    [VIR_CGROUP_CONTROLLER_CPUACCT] = NULL,
> -    [VIR_CGROUP_CONTROLLER_CPUSET] = NULL,
> -    [VIR_CGROUP_CONTROLLER_MEMORY] = NULL,
> -    [VIR_CGROUP_CONTROLLER_DEVICES] = NULL,
> -    [VIR_CGROUP_CONTROLLER_FREEZER] = NULL,
> -    [VIR_CGROUP_CONTROLLER_BLKIO] = NULL,
> -    [VIR_CGROUP_CONTROLLER_SYSTEMD] = "/not/really/sys/fs/cgroup/sys
> temd",
> -};
>
>  const char *links[VIR_CGROUP_CONTROLLER_LAST] = {
>      [VIR_CGROUP_CONTROLLER_CPU] = "/not/really/sys/fs/cgroup/cpu",
> @@ -147,17 +137,6 @@ const char *linksAllInOne[VIR_CGROUP_CONTROLLER_LAST]
> = {
>      [VIR_CGROUP_CONTROLLER_SYSTEMD] = NULL,
>  };
>
> -const char *linksLogind[VIR_CGROUP_CONTROLLER_LAST] = {
> -    [VIR_CGROUP_CONTROLLER_CPU] = NULL,
> -    [VIR_CGROUP_CONTROLLER_CPUACCT] = NULL,
> -    [VIR_CGROUP_CONTROLLER_CPUSET] = NULL,
> -    [VIR_CGROUP_CONTROLLER_MEMORY] = NULL,
> -    [VIR_CGROUP_CONTROLLER_DEVICES] = NULL,
> -    [VIR_CGROUP_CONTROLLER_FREEZER] = NULL,
> -    [VIR_CGROUP_CONTROLLER_BLKIO] = NULL,
> -    [VIR_CGROUP_CONTROLLER_SYSTEMD] = NULL,
> -};
> -
>
>  static int
>  testCgroupDetectMounts(const void *args)
> @@ -541,24 +520,13 @@ static int testCgroupNewForSelfLogind(const void
> *args ATTRIBUTE_UNUSED)
>  {
>      virCgroupPtr cgroup = NULL;
>      int ret = -1;
> -    const char *placement[VIR_CGROUP_CONTROLLER_LAST] = {
> -        [VIR_CGROUP_CONTROLLER_CPU] = NULL,
> -        [VIR_CGROUP_CONTROLLER_CPUACCT] = NULL,
> -        [VIR_CGROUP_CONTROLLER_CPUSET] = NULL,
> -        [VIR_CGROUP_CONTROLLER_MEMORY] = NULL,
> -        [VIR_CGROUP_CONTROLLER_DEVICES] = NULL,
> -        [VIR_CGROUP_CONTROLLER_FREEZER] = NULL,
> -        [VIR_CGROUP_CONTROLLER_BLKIO] = NULL,
> -        [VIR_CGROUP_CONTROLLER_SYSTEMD] = "/",
> -    };
>
> -    if (virCgroupNewSelf(&cgroup) < 0) {
> -        fprintf(stderr, "Cannot create cgroup for self\n");
> +    if (virCgroupNewSelf(&cgroup) == 0) {
> +        fprintf(stderr, "Expected cgroup creation to fail.\n");
>

Seems that code here would fit quite well in the last patch of the previous
series in order to avoid the test failure introduced there.


>          goto cleanup;
>      }
>
> -    ret = validateCgroup(cgroup, "", mountsLogind, linksLogind,
> placement);
> -
> +    ret = 0;
>   cleanup:
>      virCgroupFree(&cgroup);
>      return ret;
> --
> 2.17.1
>
> --
> libvir-list mailing list
> libvir-list at redhat.com
> https://www.redhat.com/mailman/listinfo/libvir-list
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://listman.redhat.com/archives/libvir-list/attachments/20180920/9799437b/attachment-0001.htm>


More information about the libvir-list mailing list