[libvirt] [PATCH 09/17] libvirt-lxc: add virDomainLxcEnterCGroup API
John Ferlan
jferlan at redhat.com
Wed Apr 27 17:48:00 UTC 2016
On 04/14/2016 11:22 AM, Daniel P. Berrange wrote:
> Add the virDomainLxcEnterCGroup API to the libvirt-lxc.so
> file. This method moves the calling process into the cgroups
> associated with the container.
>
> Signed-off-by: Daniel P. Berrange <berrange at redhat.com>
> ---
> include/libvirt/libvirt-lxc.h | 2 ++
> src/libvirt-lxc.c | 47 +++++++++++++++++++++++++++++++++++++++++++
> src/libvirt_lxc.syms | 5 +++++
> 3 files changed, 54 insertions(+)
>
> diff --git a/include/libvirt/libvirt-lxc.h b/include/libvirt/libvirt-lxc.h
> index 1901fce..0d16a5c 100644
> --- a/include/libvirt/libvirt-lxc.h
> +++ b/include/libvirt/libvirt-lxc.h
> @@ -46,6 +46,8 @@ int virDomainLxcEnterSecurityLabel(virSecurityModelPtr model,
> virSecurityLabelPtr label,
> virSecurityLabelPtr oldlabel,
> unsigned int flags);
> +int virDomainLxcEnterCGroup(virDomainPtr domain,
> + unsigned int flags);
>
> # ifdef __cplusplus
> }
> diff --git a/src/libvirt-lxc.c b/src/libvirt-lxc.c
> index 8553570..16e08e9 100644
> --- a/src/libvirt-lxc.c
> +++ b/src/libvirt-lxc.c
> @@ -36,6 +36,7 @@
> #ifdef WITH_APPARMOR
> # include <sys/apparmor.h>
> #endif
> +#include "vircgroup.h"
>
> #define VIR_FROM_THIS VIR_FROM_NONE
>
> @@ -269,3 +270,49 @@ virDomainLxcEnterSecurityLabel(virSecurityModelPtr model,
> virDispatchError(NULL);
> return -1;
> }
> +
> +
> +/**
> + * virDomainLxcEnterCGroup:
> + * @domain: a domain object
> + * @flags: currently unused, pass 0
> + *
> + * This API is LXC specific, so it will only work with hypervisor
> + * connections to the LXC driver.
> + *
> + * Attaches the process to the control cgroups associated
> + * with the container @domain.
> + *
> + * Returns 0 on success, -1 on error
> + */
> +int virDomainLxcEnterCGroup(virDomainPtr domain,
> + unsigned int flags)
> +{
> + virConnectPtr conn;
> + virCgroupPtr cgroup = NULL;
> +
> + VIR_DOMAIN_DEBUG(domain, "flags=%x", flags);
> +
> + virResetLastError();
> +
> + virCheckDomainReturn(domain, -1);
> + conn = domain->conn;
> +
> + virCheckReadOnlyGoto(conn->flags, error);
> + virCheckFlagsGoto(0, error);
> +
> + if (virCgroupNewDetect(domain->id, -1, &cgroup) < 0)
virCgroupNewDetect takes a pid as parameter 1
ACK with that (your call on 1.3.4 or wait for 1.3.5 in which case the
next file would need adjustment)
John
> + goto error;
> +
> + if (virCgroupAddTask(cgroup, getpid()) < 0)
> + goto error;
> +
> + virCgroupFree(&cgroup);
> +
> + return 0;
> +
> + error:
> + virDispatchError(NULL);
> + virCgroupFree(&cgroup);
> + return -1;
> +}
> diff --git a/src/libvirt_lxc.syms b/src/libvirt_lxc.syms
> index ccf1be9..061152a 100644
> --- a/src/libvirt_lxc.syms
> +++ b/src/libvirt_lxc.syms
> @@ -20,3 +20,8 @@ LIBVIRT_LXC_1.0.4 {
> global:
> virDomainLxcEnterSecurityLabel;
> } LIBVIRT_LXC_1.0.2;
> +
> +LIBVIRT_LXC_1.3.4 {
> + global:
> + virDomainLxcEnterCGroup;
> +} LIBVIRT_LXC_1.0.4;
>
More information about the libvir-list
mailing list