On Tue, Sep 18, 2018 at 5:45 PM, Pavel Hrdina <phrd...@redhat.com> wrote:
> Signed-off-by: Pavel Hrdina <phrd...@redhat.com> > Reviewed-by: Fabiano Fidêncio <fiden...@redhat.com> > --- > src/util/vircgroup.c | 35 ++------------------------------- > src/util/vircgroupbackend.h | 4 ++++ > src/util/vircgrouppriv.h | 2 ++ > src/util/vircgroupv1.c | 39 +++++++++++++++++++++++++++++++++++++ > 4 files changed, 47 insertions(+), 33 deletions(-) > > diff --git a/src/util/vircgroup.c b/src/util/vircgroup.c > index 8083e4596d..37bfd7893c 100644 > --- a/src/util/vircgroup.c > +++ b/src/util/vircgroup.c > @@ -2917,7 +2917,7 @@ virCgroupGetCpuacctPercpuUsage(virCgroupPtr group, > char **usage) > } > > > -static int > +int > virCgroupRemoveRecursively(char *grppath) > { > DIR *grpdir; > @@ -2980,38 +2980,7 @@ virCgroupRemoveRecursively(char *grppath) > int > virCgroupRemove(virCgroupPtr group) > { > - int rc = 0; > - size_t i; > - > - VIR_DEBUG("Removing cgroup %s", group->path); > - for (i = 0; i < VIR_CGROUP_CONTROLLER_LAST; i++) { > - VIR_AUTOFREE(char *) grppath = NULL; > - > - /* Skip over controllers not mounted */ > - if (!group->controllers[i].mountPoint) > - continue; > - > - /* We must never rmdir() in systemd's hierarchy */ > - if (i == VIR_CGROUP_CONTROLLER_SYSTEMD) > - continue; > - > - /* Don't delete the root group, if we accidentally > - ended up in it for some reason */ > - if (STREQ(group->controllers[i].placement, "/")) > - continue; > - > - if (virCgroupPathOfController(group, > - i, > - NULL, > - &grppath) != 0) > - continue; > - > - VIR_DEBUG("Removing cgroup %s and all child cgroups", grppath); > - rc = virCgroupRemoveRecursively(grppath); > - } > - VIR_DEBUG("Done removing cgroup %s", group->path); > - > - return rc; > + return group->backend->remove(group); > } > > > diff --git a/src/util/vircgroupbackend.h b/src/util/vircgroupbackend.h > index 214c9f0726..11ed8431cf 100644 > --- a/src/util/vircgroupbackend.h > +++ b/src/util/vircgroupbackend.h > @@ -100,6 +100,9 @@ typedef int > bool create, > unsigned int flags); > > +typedef int > +(*virCgroupRemoveCB)(virCgroupPtr group); > + > struct _virCgroupBackend { > virCgroupBackendType type; > > @@ -117,6 +120,7 @@ struct _virCgroupBackend { > virCgroupGetAnyControllerCB getAnyController; > virCgroupPathOfControllerCB pathOfController; > virCgroupMakeGroupCB makeGroup; > + virCgroupRemoveCB remove; > }; > typedef struct _virCgroupBackend virCgroupBackend; > typedef virCgroupBackend *virCgroupBackendPtr; > diff --git a/src/util/vircgrouppriv.h b/src/util/vircgrouppriv.h > index 2e731458d5..a760b9bcfd 100644 > --- a/src/util/vircgrouppriv.h > +++ b/src/util/vircgrouppriv.h > @@ -88,4 +88,6 @@ int virCgroupNewDomainPartition(virCgroupPtr partition, > virCgroupPtr *group) > ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2) ATTRIBUTE_NONNULL(5); > > +int virCgroupRemoveRecursively(char *grppath); > + > #endif /* __VIR_CGROUP_PRIV_H__ */ > diff --git a/src/util/vircgroupv1.c b/src/util/vircgroupv1.c > index cf484216cc..25afd39235 100644 > --- a/src/util/vircgroupv1.c > +++ b/src/util/vircgroupv1.c > @@ -667,6 +667,44 @@ virCgroupV1MakeGroup(virCgroupPtr parent, > } > > > +static int > +virCgroupV1Remove(virCgroupPtr group) > +{ > + int rc = 0; > + size_t i; > + > + VIR_DEBUG("Removing cgroup %s", group->path); > + for (i = 0; i < VIR_CGROUP_CONTROLLER_LAST; i++) { > + VIR_AUTOFREE(char *) grppath = NULL; > + > + /* Skip over controllers not mounted */ > + if (!group->controllers[i].mountPoint) > + continue; > + > + /* We must never rmdir() in systemd's hierarchy */ > + if (i == VIR_CGROUP_CONTROLLER_SYSTEMD) > + continue; > + > + /* Don't delete the root group, if we accidentally > + ended up in it for some reason */ > + if (STREQ(group->controllers[i].placement, "/")) > + continue; > + > + if (virCgroupV1PathOfController(group, > + i, > + NULL, > + &grppath) != 0) > + continue; > + > + VIR_DEBUG("Removing cgroup %s and all child cgroups", grppath); > + rc = virCgroupRemoveRecursively(grppath); > + } > + VIR_DEBUG("Done removing cgroup %s", group->path); > + > + return rc; > +} > + > + > virCgroupBackend virCgroupV1Backend = { > .type = VIR_CGROUP_BACKEND_TYPE_V1, > > @@ -683,6 +721,7 @@ virCgroupBackend virCgroupV1Backend = { > .getAnyController = virCgroupV1GetAnyController, > .pathOfController = virCgroupV1PathOfController, > .makeGroup = virCgroupV1MakeGroup, > + .remove = virCgroupV1Remove, > }; > > > -- > 2.17.1 > > -- > libvir-list mailing list > libvir-list@redhat.com > https://www.redhat.com/mailman/listinfo/libvir-list >
-- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list