
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.
+ 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. ACK with that nit fixed, so I squashed in this before pushing: 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@redhat.com +1-801-349-2682 Libvirt virtualization library http://libvirt.org