提交 d11d93f4 编写于 作者: D Daniel P. Berrange

Fix check for existance of cgroups at creation

In the scenario where the cgroups were mounted but the
particular group did not exist, and the caller had not
requested auto-creation, the code would fail to return
an error condition. This caused the lxc_controller to
think the cgroup existed, and it then later failed when
attempting to use it

* src/util/cgroup.c: Raise an error if the cgroup path does not
  exist
上级 fd2090cd
......@@ -442,7 +442,7 @@ static int virCgroupCpuSetInherit(virCgroupPtr parent, virCgroupPtr group)
return rc;
}
static int virCgroupMakeGroup(virCgroupPtr parent, virCgroupPtr group)
static int virCgroupMakeGroup(virCgroupPtr parent, virCgroupPtr group, int create)
{
int i;
int rc = 0;
......@@ -461,7 +461,8 @@ static int virCgroupMakeGroup(virCgroupPtr parent, virCgroupPtr group)
VIR_DEBUG("Make controller %s", path);
if (access(path, F_OK) != 0) {
if (mkdir(path, 0755) < 0) {
if (!create ||
mkdir(path, 0755) < 0) {
rc = -errno;
VIR_FREE(path);
break;
......@@ -548,7 +549,7 @@ static int virCgroupAppRoot(int privileged,
if (rc != 0)
goto cleanup;
rc = virCgroupMakeGroup(rootgrp, *group);
rc = virCgroupMakeGroup(rootgrp, *group, 1);
cleanup:
virCgroupFree(&rootgrp);
......@@ -647,9 +648,8 @@ int virCgroupForDriver(const char *name,
rc = virCgroupNew(path, group);
VIR_FREE(path);
if (rc == 0 &&
create) {
rc = virCgroupMakeGroup(rootgrp, *group);
if (rc == 0) {
rc = virCgroupMakeGroup(rootgrp, *group, create);
if (rc != 0)
virCgroupFree(group);
}
......@@ -695,9 +695,8 @@ int virCgroupForDomain(virCgroupPtr driver,
rc = virCgroupNew(path, group);
VIR_FREE(path);
if (rc == 0 &&
create) {
rc = virCgroupMakeGroup(driver, *group);
if (rc == 0) {
rc = virCgroupMakeGroup(driver, *group, create);
if (rc != 0)
virCgroupFree(group);
}
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册