
On 02/23/2016 10:58 AM, Henning Schild wrote:
virCgroupNewMachine used to add the pidleader to the newly created machine cgroup. Do not do this implicit anymore.
Signed-off-by: Henning Schild <henning.schild@siemens.com> --- src/lxc/lxc_cgroup.c | 11 +++++++++++ src/qemu/qemu_cgroup.c | 11 +++++++++++ src/util/vircgroup.c | 22 ---------------------- 3 files changed, 22 insertions(+), 22 deletions(-)
So here we are again... Trying to recall where we left off... Ah yes, the entrails for this particular patch point me at the following: http://www.redhat.com/archives/libvir-list/2015-December/msg00759.html for lxc, and the following for qemu: http://www.redhat.com/archives/libvir-list/2016-January/msg00513.html Essentially the problem being that we can get a 0 return status *and* the returned cgroup pointer is still NULL That still needs to be addressed here (if this gets accepted)
diff --git a/src/lxc/lxc_cgroup.c b/src/lxc/lxc_cgroup.c index ad254e4..609e9ea 100644 --- a/src/lxc/lxc_cgroup.c +++ b/src/lxc/lxc_cgroup.c @@ -504,6 +504,17 @@ virCgroupPtr virLXCCgroupCreate(virDomainDefPtr def, &cgroup) < 0)
IOW: < 0 || !cgroup)
goto cleanup;
+ if (virCgroupAddTask(cgroup, initpid) < 0) { + virErrorPtr saved = virSaveLastError(); + virCgroupRemove(cgroup); + virCgroupFree(&cgroup); + if (saved) { + virSetError(saved); + virFreeError(saved); + } + goto cleanup; + } + /* setup control group permissions for user namespace */ if (def->idmap.uidmap) { if (virCgroupSetOwner(cgroup, diff --git a/src/qemu/qemu_cgroup.c b/src/qemu/qemu_cgroup.c index e41f461..66dc782 100644 --- a/src/qemu/qemu_cgroup.c +++ b/src/qemu/qemu_cgroup.c @@ -789,6 +789,17 @@ qemuInitCgroup(virQEMUDriverPtr driver,
and a few lines above here: &priv->cgroup) < 0 || !priv->cgroup) { John
goto cleanup; }
+ if (virCgroupAddTask(priv->cgroup, vm->pid) < 0) { + virErrorPtr saved = virSaveLastError(); + virCgroupRemove(priv->cgroup); + virCgroupFree(&priv->cgroup); + if (saved) { + virSetError(saved); + virFreeError(saved); + } + goto cleanup; + } + done: ret = 0; cleanup: diff --git a/src/util/vircgroup.c b/src/util/vircgroup.c index 11f33ab..aef8e8c 100644 --- a/src/util/vircgroup.c +++ b/src/util/vircgroup.c @@ -1682,16 +1682,6 @@ virCgroupNewMachineSystemd(const char *name, } }
- if (virCgroupAddTask(*group, pidleader) < 0) { - virErrorPtr saved = virSaveLastError(); - virCgroupRemove(*group); - virCgroupFree(group); - if (saved) { - virSetError(saved); - virFreeError(saved); - } - } - ret = 0; cleanup: virCgroupFree(&parent); @@ -1714,7 +1704,6 @@ int virCgroupTerminateMachine(const char *name, static int virCgroupNewMachineManual(const char *name, const char *drivername, - pid_t pidleader, const char *partition, int controllers, virCgroupPtr *group) @@ -1740,16 +1729,6 @@ virCgroupNewMachineManual(const char *name, group) < 0) goto cleanup;
- if (virCgroupAddTask(*group, pidleader) < 0) { - virErrorPtr saved = virSaveLastError(); - virCgroupRemove(*group); - virCgroupFree(group); - if (saved) { - virSetError(saved); - virFreeError(saved); - } - } - done: ret = 0;
@@ -1796,7 +1775,6 @@ virCgroupNewMachine(const char *name,
return virCgroupNewMachineManual(name, drivername, - pidleader, partition, controllers, group);