[libvirt] [PATCH] cgroup: Add missing errno == ENOENT check in virCgroupRemoveRecursively

Eric Blake eblake at redhat.com
Tue Jun 29 18:21:48 UTC 2010


On 06/28/2010 08:49 PM, Ryota Ozaki wrote:
>>>      grpdir = opendir(grppath);
>>>      if (grpdir == NULL) {
>>> +        if (errno == ENOENT)
>>> +            return 0;
>>
>> Shouldn't this be continue instead of return 0, so as to go on to the
>> next readdir() in case there is anything else in the directory?
> 
> The next readdir() and mkdir() following to it are for the directory (e.g.,
> /a/b/c) and its inclusions (e.g., /a/b/c/d). We cannot go on if the directory
> (a/b/c) does not present. Other sibling directories of the directory (e.g,
> /a/b/d) will be handled in the caller function.
> 
> Well, am I missing your question?

No, I was misreading the code - I thought this was an early return
inside the readdir loop, but re-reading it, I see it is an early exit
because the opendir() failed.  So,

ACK, and applied your patch.

> If we follow the same workaround as doing for virCgroupForDriver,
> it'll be like this:
> 
> #if defined _DIRENT_HAVE_D_TYPE
> static int virCgroupRemoveRecursively(char *grppath)
> {
>     ...
> }
> #else
> static int virCgroupRemoveRecursively(char *grppath ATTRIBUTE_UNUSED)
> {
>     /* Claim no support */
>     return -ENXIO;
> }
> #endif
> 
> I'm not sure it's sane though, it'll work...

Looks clean enough to me.  Let's apply that as a separate patch; would
you care to do the honors of writing it?

-- 
Eric Blake   eblake at redhat.com    +1-801-349-2682
Libvirt virtualization library http://libvirt.org

-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 619 bytes
Desc: OpenPGP digital signature
URL: <http://listman.redhat.com/archives/libvir-list/attachments/20100629/cd8aed06/attachment-0001.sig>


More information about the libvir-list mailing list