[libvirt] [PATCH] cgroup: Add missing errno == ENOENT check in virCgroupRemoveRecursively
Ryota Ozaki
ozaki.ryota at gmail.com
Wed Jun 30 11:00:44 UTC 2010
On Wed, Jun 30, 2010 at 3:21 AM, Eric Blake <eblake at redhat.com> wrote:
> 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,
I see.
>
> ACK, and applied your patch.
Thanks!
>
>> 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?
OK, I will send the patch soon.
ozaki-r
>
> --
> Eric Blake eblake at redhat.com +1-801-349-2682
> Libvirt virtualization library http://libvirt.org
>
>
More information about the libvir-list
mailing list