[libvirt] [PATCH 17/47] vircgroup: extract virCgroupV1AddTask

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


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

> Signed-off-by: Pavel Hrdina <phrdina at redhat.com>
>

Reviewed-by: Fabiano Fidêncio <fidencio at redhat.com>


> ---
>  src/util/vircgroup.c        | 48 +++++--------------------------------
>  src/util/vircgroupbackend.h | 12 ++++++++++
>  src/util/vircgrouppriv.h    |  5 ++++
>  src/util/vircgroupv1.c      | 31 ++++++++++++++++++++++++
>  4 files changed, 54 insertions(+), 42 deletions(-)
>
> diff --git a/src/util/vircgroup.c b/src/util/vircgroup.c
> index 37bfd7893c..5dd736930b 100644
> --- a/src/util/vircgroup.c
> +++ b/src/util/vircgroup.c
> @@ -546,7 +546,7 @@ virCgroupSetValueU64(virCgroupPtr group,
>  }
>
>
> -static int
> +int
>  virCgroupSetValueI64(virCgroupPtr group,
>                       int controller,
>                       const char *key,
> @@ -674,42 +674,6 @@ virCgroupNew(pid_t pid,
>  }
>
>
> -typedef enum {
> -    VIR_CGROUP_TASK_PROCESS = 0,
> -    VIR_CGROUP_TASK_SYSTEMD = 1 << 0,
> -    VIR_CGROUP_TASK_THREAD = 1 << 1,
> -} virCgroupTaskFlags;
> -
> -
> -static int
> -virCgroupAddTaskInternal(virCgroupPtr group,
> -                         pid_t pid,
> -                         unsigned int flags)
> -{
> -    int ret = -1;
> -    size_t i;
> -
> -    for (i = 0; i < VIR_CGROUP_CONTROLLER_LAST; i++) {
> -        /* Skip over controllers not mounted */
> -        if (!group->controllers[i].mountPoint)
> -            continue;
> -
> -        /* We must never add tasks in systemd's hierarchy
> -         * unless we're intentionally trying to move a
> -         * task into a systemd machine scope */
> -        if (i == VIR_CGROUP_CONTROLLER_SYSTEMD &&
> -            !(flags & VIR_CGROUP_TASK_SYSTEMD))
> -            continue;
> -
> -        if (virCgroupSetValueI64(group, i, "tasks", pid) < 0)
> -            goto cleanup;
> -    }
> -
> -    ret = 0;
> - cleanup:
> -    return ret;
> -}
> -
>  /**
>   * virCgroupAddProcess:
>   *
> @@ -724,7 +688,7 @@ virCgroupAddTaskInternal(virCgroupPtr group,
>  int
>  virCgroupAddProcess(virCgroupPtr group, pid_t pid)
>  {
> -    return virCgroupAddTaskInternal(group, pid, VIR_CGROUP_TASK_PROCESS);
> +    return group->backend->addTask(group, pid, VIR_CGROUP_TASK_PROCESS);
>  }
>
>  /**
> @@ -741,9 +705,9 @@ virCgroupAddProcess(virCgroupPtr group, pid_t pid)
>  int
>  virCgroupAddMachineProcess(virCgroupPtr group, pid_t pid)
>  {
> -    return virCgroupAddTaskInternal(group, pid,
> -                                    VIR_CGROUP_TASK_PROCESS |
> -                                    VIR_CGROUP_TASK_SYSTEMD);
> +    return group->backend->addTask(group, pid,
> +                                   VIR_CGROUP_TASK_PROCESS |
> +                                   VIR_CGROUP_TASK_SYSTEMD);
>  }
>
>  /**
> @@ -761,7 +725,7 @@ int
>  virCgroupAddThread(virCgroupPtr group,
>                     pid_t pid)
>  {
> -    return virCgroupAddTaskInternal(group, pid, VIR_CGROUP_TASK_THREAD);
> +    return group->backend->addTask(group, pid, VIR_CGROUP_TASK_THREAD);
>  }
>
>
> diff --git a/src/util/vircgroupbackend.h b/src/util/vircgroupbackend.h
> index 11ed8431cf..4661d82132 100644
> --- a/src/util/vircgroupbackend.h
> +++ b/src/util/vircgroupbackend.h
> @@ -35,6 +35,12 @@ typedef enum {
>                                         */
>  } virCgroupBackendFlags;
>
> +typedef enum {
> +    VIR_CGROUP_TASK_PROCESS = 0,
> +    VIR_CGROUP_TASK_SYSTEMD = 1 << 0,
> +    VIR_CGROUP_TASK_THREAD = 1 << 1,
> +} virCgroupBackendTaskFlags;
> +
>  typedef enum {
>      VIR_CGROUP_BACKEND_TYPE_V1 = 0,
>      VIR_CGROUP_BACKEND_TYPE_LAST,
> @@ -103,6 +109,11 @@ typedef int
>  typedef int
>  (*virCgroupRemoveCB)(virCgroupPtr group);
>
> +typedef int
> +(*virCgroupAddTaskCB)(virCgroupPtr group,
> +                      pid_t pid,
> +                      unsigned int flags);
> +
>  struct _virCgroupBackend {
>      virCgroupBackendType type;
>
> @@ -121,6 +132,7 @@ struct _virCgroupBackend {
>      virCgroupPathOfControllerCB pathOfController;
>      virCgroupMakeGroupCB makeGroup;
>      virCgroupRemoveCB remove;
> +    virCgroupAddTaskCB addTask;
>  };
>  typedef struct _virCgroupBackend virCgroupBackend;
>  typedef virCgroupBackend *virCgroupBackendPtr;
> diff --git a/src/util/vircgrouppriv.h b/src/util/vircgrouppriv.h
> index a760b9bcfd..01714370be 100644
> --- a/src/util/vircgrouppriv.h
> +++ b/src/util/vircgrouppriv.h
> @@ -73,6 +73,11 @@ int virCgroupGetValueU64(virCgroupPtr group,
>                           const char *key,
>                           unsigned long long int *value);
>
> +int virCgroupSetValueI64(virCgroupPtr group,
> +                         int controller,
> +                         const char *key,
> +                         long long int value);
> +
>  int virCgroupPartitionEscape(char **path);
>
>  int virCgroupNewPartition(const char *path,
> diff --git a/src/util/vircgroupv1.c b/src/util/vircgroupv1.c
> index 25afd39235..c9f6fd925a 100644
> --- a/src/util/vircgroupv1.c
> +++ b/src/util/vircgroupv1.c
> @@ -705,6 +705,36 @@ virCgroupV1Remove(virCgroupPtr group)
>  }
>
>
> +static int
> +virCgroupV1AddTask(virCgroupPtr group,
> +                   pid_t pid,
> +                   unsigned int flags)
> +{
> +    int ret = -1;
> +    size_t i;
> +
> +    for (i = 0; i < VIR_CGROUP_CONTROLLER_LAST; i++) {
> +        /* Skip over controllers not mounted */
> +        if (!group->controllers[i].mountPoint)
> +            continue;
> +
> +        /* We must never add tasks in systemd's hierarchy
> +         * unless we're intentionally trying to move a
> +         * task into a systemd machine scope */
> +        if (i == VIR_CGROUP_CONTROLLER_SYSTEMD &&
> +            !(flags & VIR_CGROUP_TASK_SYSTEMD))
> +            continue;
> +
> +        if (virCgroupSetValueI64(group, i, "tasks", pid) < 0)
> +            goto cleanup;
> +    }
> +
> +    ret = 0;
> + cleanup:
> +    return ret;
> +}
> +
> +
>  virCgroupBackend virCgroupV1Backend = {
>      .type = VIR_CGROUP_BACKEND_TYPE_V1,
>
> @@ -722,6 +752,7 @@ virCgroupBackend virCgroupV1Backend = {
>      .pathOfController = virCgroupV1PathOfController,
>      .makeGroup = virCgroupV1MakeGroup,
>      .remove = virCgroupV1Remove,
> +    .addTask = virCgroupV1AddTask,
>  };
>
>
> --
> 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/a092ea28/attachment-0001.htm>


More information about the libvir-list mailing list