[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