[libvirt] [PATCH v2 1/2] cgroup: Change virCgroupRemove to remove all descendant groups at first

Ryota Ozaki ozaki.ryota at gmail.com
Thu Jun 24 10:07:27 UTC 2010


On Thu, Jun 24, 2010 at 5:41 AM, Eric Blake <eblake at redhat.com> wrote:
> On 06/23/2010 10:00 AM, Ryota Ozaki wrote:
>> As same as normal directories, a cgroup cannot be removed if it
>> contains sub groups. This patch changes virCgroupRemove to remove
>> all descendant groups (subdirectories) of a target group before
>> removing the target group.
>>
>> +    for (;;) {
>> +        char *path;
>> +
>> +        errno = 0;
>> +        ent = readdir(grpdir);
>> +        if (ent == NULL) {
>> +            if (errno)
>
> This should also set rc, so the overall function exits with nonzero status.

Oh, right.

>
>> +                VIR_ERROR(_("Failed to readdir for %s (%d)"), grppath, errno);
>> +            break;
>> +        }
>> +
>> +        if (ent->d_name[0] == '.') continue;
>> +        if (ent->d_type != DT_DIR) continue;
>
> Hmm - d_type is not guaranteed by POSIX.  Then again, neither is cgroup,
> so you're just fine exploiting it.

I believe so :-)

>
> ACK with that nit fixed, so I squashed in this before pushing:

Thank you for fixing it.
  ozaki-r

>
> diff --git i/src/util/cgroup.c w/src/util/cgroup.c
> index faec23f..3c23251 100644
> --- i/src/util/cgroup.c
> +++ w/src/util/cgroup.c
> @@ -1,6 +1,7 @@
>  /*
>  * cgroup.c: Tools for managing cgroups
>  *
> + * Copyright (C) 2010 Red Hat, Inc.
>  * Copyright IBM Corp. 2008
>  *
>  * See COPYING.LIB for the License of this software
> @@ -581,7 +582,7 @@ static int virCgroupRemoveRecursively(char *grppath)
>         errno = 0;
>         ent = readdir(grpdir);
>         if (ent == NULL) {
> -            if (errno)
> +            if ((rc = -errno))
>                 VIR_ERROR(_("Failed to readdir for %s (%d)"), grppath,
> errno);
>             break;
>         }
>
>
> --
> Eric Blake   eblake at redhat.com    +1-801-349-2682
> Libvirt virtualization library http://libvirt.org
>
>




More information about the libvir-list mailing list