On Fri, Jul 19, 2013 at 09:51:03AM -0600, Eric Blake wrote:
On 07/19/2013 08:54 AM, Daniel P. Berrange wrote:
>>> rc = virCgroupAddTask(cgroup_vcpu, priv->vcpupids[i]);
>>> if (rc < 0) {
>>> virReportSystemError(-rc,
>>> _("unable to add vcpu %zu task %d to
>>> cgroup"),
>>> i, priv->vcpupids[i]);
>>> goto cleanup;
>>> }
>>>
>>> I didn't look elsewhere; all I needed was one counterexample to state
>>> your patch is incomplete until you audit all callers impacted by
>>> semantic changes.
>>
>> Fixed those.
>
> This time with the diff attached.
> +++ b/src/qemu/qemu_cgroup.c
Still incomplete - you fixed virCgroupAddTask callers, but didn't audit
for others. At least in this file, we have:
Sigh, you're right. I clearly forgot to change any of the callers.
diff --git a/src/lxc/lxc_cgroup.c b/src/lxc/lxc_cgroup.c
index 3cec8e2..025720d 100644
--- a/src/lxc/lxc_cgroup.c
+++ b/src/lxc/lxc_cgroup.c
@@ -36,33 +36,18 @@ static int virLXCCgroupSetupCpuTune(virDomainDefPtr def,
virCgroupPtr cgroup)
{
int ret = -1;
- if (def->cputune.shares != 0) {
- int rc = virCgroupSetCpuShares(cgroup, def->cputune.shares);
- if (rc != 0) {
- virReportSystemError(-rc,
- _("Unable to set io cpu shares for domain
%s"),
- def->name);
- goto cleanup;
- }
- }
- if (def->cputune.quota != 0) {
- int rc = virCgroupSetCpuCfsQuota(cgroup, def->cputune.quota);
- if (rc != 0) {
- virReportSystemError(-rc,
- _("Unable to set io cpu quota for domain
%s"),
- def->name);
- goto cleanup;
- }
- }
- if (def->cputune.period != 0) {
- int rc = virCgroupSetCpuCfsPeriod(cgroup, def->cputune.period);
- if (rc != 0) {
- virReportSystemError(-rc,
- _("Unable to set io cpu period for domain
%s"),
- def->name);
- goto cleanup;
- }
- }
+ if (def->cputune.shares != 0 &&
+ virCgroupSetCpuShares(cgroup, def->cputune.shares) < 0)
+ goto cleanup;
+
+ if (def->cputune.quota != 0 &&
+ virCgroupSetCpuCfsQuota(cgroup, def->cputune.quota) < 0)
+ goto cleanup;
+
+ if (def->cputune.period != 0 &&
+ virCgroupSetCpuCfsPeriod(cgroup, def->cputune.period) < 0)
+ goto cleanup;
+
ret = 0;
cleanup:
return ret;
@@ -73,7 +58,7 @@ static int virLXCCgroupSetupCpusetTune(virDomainDefPtr def,
virCgroupPtr cgroup,
virBitmapPtr nodemask)
{
- int rc = 0;
+ int ret = -1;
char *mask = NULL;
if (def->placement_mode != VIR_DOMAIN_CPU_PLACEMENT_MODE_AUTO &&
@@ -85,12 +70,8 @@ static int virLXCCgroupSetupCpusetTune(virDomainDefPtr def,
return -1;
}
- rc = virCgroupSetCpusetCpus(cgroup, mask);
- if (rc < 0) {
- virReportSystemError(-rc, "%s",
- _("Unable to set cpuset.cpus"));
+ if (virCgroupSetCpusetCpus(cgroup, mask) < 0)
goto cleanup;
- }
}
if ((def->numatune.memory.nodemask ||
@@ -109,14 +90,14 @@ static int virLXCCgroupSetupCpusetTune(virDomainDefPtr def,
return -1;
}
- rc = virCgroupSetCpusetMems(cgroup, mask);
- if (rc < 0)
- virReportSystemError(-rc, "%s", _("Unable to set
cpuset.mems"));
+ if (virCgroupSetCpusetMems(cgroup, mask) < 0)
+ goto cleanup;
}
+ ret = 0;
cleanup:
VIR_FREE(mask);
- return rc;
+ return ret;
}
@@ -124,31 +105,18 @@ static int virLXCCgroupSetupBlkioTune(virDomainDefPtr def,
virCgroupPtr cgroup)
{
size_t i;
- int rc;
-
- if (def->blkio.weight) {
- rc = virCgroupSetBlkioWeight(cgroup, def->blkio.weight);
- if (rc != 0) {
- virReportSystemError(-rc,
- _("Unable to set Blkio weight for domain
%s"),
- def->name);
- return -1;
- }
- }
+
+ if (def->blkio.weight &&
+ virCgroupSetBlkioWeight(cgroup, def->blkio.weight) < 0)
+ return -1;
if (def->blkio.ndevices) {
for (i = 0; i < def->blkio.ndevices; i++) {
virBlkioDeviceWeightPtr dw = &def->blkio.devices[i];
if (!dw->weight)
continue;
- rc = virCgroupSetBlkioDeviceWeight(cgroup, dw->path, dw->weight);
- if (rc != 0) {
- virReportSystemError(-rc,
- _("Unable to set io device weight "
- "for domain %s"),
- def->name);
+ if (virCgroupSetBlkioDeviceWeight(cgroup, dw->path, dw->weight) <
0)
return -1;
- }
}
}
@@ -160,45 +128,21 @@ static int virLXCCgroupSetupMemTune(virDomainDefPtr def,
virCgroupPtr cgroup)
{
int ret = -1;
- int rc;
- rc = virCgroupSetMemory(cgroup, def->mem.max_balloon);
- if (rc != 0) {
- virReportSystemError(-rc,
- _("Unable to set memory limit for domain %s"),
- def->name);
+ if (virCgroupSetMemory(cgroup, def->mem.max_balloon) < 0)
goto cleanup;
- }
- if (def->mem.hard_limit) {
- rc = virCgroupSetMemoryHardLimit(cgroup, def->mem.hard_limit);
- if (rc != 0) {
- virReportSystemError(-rc,
- _("Unable to set memory hard limit for domain
%s"),
- def->name);
- goto cleanup;
- }
- }
+ if (def->mem.hard_limit &&
+ virCgroupSetMemoryHardLimit(cgroup, def->mem.hard_limit) < 0)
+ goto cleanup;
- if (def->mem.soft_limit) {
- rc = virCgroupSetMemorySoftLimit(cgroup, def->mem.soft_limit);
- if (rc != 0) {
- virReportSystemError(-rc,
- _("Unable to set memory soft limit for domain
%s"),
- def->name);
- goto cleanup;
- }
- }
+ if (def->mem.soft_limit &&
+ virCgroupSetMemorySoftLimit(cgroup, def->mem.soft_limit) < 0)
+ goto cleanup;
- if (def->mem.swap_hard_limit) {
- rc = virCgroupSetMemSwapHardLimit(cgroup, def->mem.swap_hard_limit);
- if (rc != 0) {
- virReportSystemError(-rc,
- _("Unable to set swap hard limit for domain
%s"),
- def->name);
- goto cleanup;
- }
- }
+ if (def->mem.swap_hard_limit &&
+ virCgroupSetMemSwapHardLimit(cgroup, def->mem.swap_hard_limit) < 0)
+ goto cleanup;
ret = 0;
cleanup:
@@ -306,32 +250,20 @@ cleanup:
int virLXCCgroupGetMeminfo(virLXCMeminfoPtr meminfo)
{
- int ret = -1, rc;
+ int ret = -1;
virCgroupPtr cgroup;
if (virCgroupNewSelf(&cgroup) < 0)
return -1;
- rc = virLXCCgroupGetMemStat(cgroup, meminfo);
- if (rc < 0) {
- virReportSystemError(-rc, "%s",
- _("Unable to get memory cgroup stat info"));
+ if (virLXCCgroupGetMemStat(cgroup, meminfo) < 0)
goto cleanup;
- }
- rc = virLXCCgroupGetMemTotal(cgroup, meminfo);
- if (rc < 0) {
- virReportSystemError(-rc, "%s",
- _("Unable to get memory cgroup total"));
+ if (virLXCCgroupGetMemTotal(cgroup, meminfo) < 0)
goto cleanup;
- }
- rc = virLXCCgroupGetMemUsage(cgroup, meminfo);
- if (rc < 0) {
- virReportSystemError(-rc, "%s",
- _("Unable to get memory cgroup stat usage"));
+ if (virLXCCgroupGetMemUsage(cgroup, meminfo) < 0)
goto cleanup;
- }
virLXCCgroupGetMemSwapTotal(cgroup, meminfo);
virLXCCgroupGetMemSwapUsage(cgroup, meminfo);
@@ -360,17 +292,11 @@ virLXCSetupHostUsbDeviceCgroup(virUSBDevicePtr dev
ATTRIBUTE_UNUSED,
void *opaque)
{
virCgroupPtr cgroup = opaque;
- int rc;
VIR_DEBUG("Process path '%s' for USB device", path);
- rc = virCgroupAllowDevicePath(cgroup, path,
- VIR_CGROUP_DEVICE_RW);
- if (rc < 0) {
- virReportSystemError(-rc,
- _("Unable to allow device %s"),
- path);
+ if (virCgroupAllowDevicePath(cgroup, path,
+ VIR_CGROUP_DEVICE_RW) < 0)
return -1;
- }
return 0;
}
@@ -382,17 +308,11 @@ virLXCTeardownHostUsbDeviceCgroup(virUSBDevicePtr dev
ATTRIBUTE_UNUSED,
void *opaque)
{
virCgroupPtr cgroup = opaque;
- int rc;
VIR_DEBUG("Process path '%s' for USB device", path);
- rc = virCgroupDenyDevicePath(cgroup, path,
- VIR_CGROUP_DEVICE_RW);
- if (rc < 0) {
- virReportSystemError(-rc,
- _("Unable to deny device %s"),
- path);
+ if (virCgroupDenyDevicePath(cgroup, path,
+ VIR_CGROUP_DEVICE_RW) < 0)
return -1;
- }
return 0;
}
@@ -402,7 +322,6 @@ static int virLXCCgroupSetupDeviceACL(virDomainDefPtr def,
virCgroupPtr cgroup)
{
int ret = -1;
- int rc;
size_t i;
static virLXCCgroupDevicePolicy devices[] = {
{'c', LXC_DEV_MAJ_MEMORY, LXC_DEV_MIN_NULL},
@@ -415,62 +334,42 @@ static int virLXCCgroupSetupDeviceACL(virDomainDefPtr def,
{'c', LXC_DEV_MAJ_FUSE, LXC_DEV_MIN_FUSE},
{0, 0, 0}};
- rc = virCgroupDenyAllDevices(cgroup);
- if (rc != 0) {
- virReportSystemError(-rc,
- _("Unable to deny devices for domain %s"),
- def->name);
+ if (virCgroupDenyAllDevices(cgroup) < 0)
goto cleanup;
- }
for (i = 0; devices[i].type != 0; i++) {
virLXCCgroupDevicePolicyPtr dev = &devices[i];
- rc = virCgroupAllowDevice(cgroup,
- dev->type,
- dev->major,
- dev->minor,
- VIR_CGROUP_DEVICE_RWM);
- if (rc != 0) {
- virReportSystemError(-rc,
- _("Unable to allow device %c:%d:%d for domain
%s"),
- dev->type, dev->major, dev->minor,
def->name);
+ if (virCgroupAllowDevice(cgroup,
+ dev->type,
+ dev->major,
+ dev->minor,
+ VIR_CGROUP_DEVICE_RWM) < 0)
goto cleanup;
- }
}
for (i = 0; i < def->ndisks; i++) {
if (def->disks[i]->type != VIR_DOMAIN_DISK_TYPE_BLOCK)
continue;
- rc = virCgroupAllowDevicePath(cgroup,
- def->disks[i]->src,
- (def->disks[i]->readonly ?
- VIR_CGROUP_DEVICE_READ :
- VIR_CGROUP_DEVICE_RW) |
- VIR_CGROUP_DEVICE_MKNOD);
- if (rc != 0) {
- virReportSystemError(-rc,
- _("Unable to allow device %s for domain %s"),
- def->disks[i]->src, def->name);
+ if (virCgroupAllowDevicePath(cgroup,
+ def->disks[i]->src,
+ (def->disks[i]->readonly ?
+ VIR_CGROUP_DEVICE_READ :
+ VIR_CGROUP_DEVICE_RW) |
+ VIR_CGROUP_DEVICE_MKNOD) < 0)
goto cleanup;
- }
}
for (i = 0; i < def->nfss; i++) {
if (def->fss[i]->type != VIR_DOMAIN_FS_TYPE_BLOCK)
continue;
- rc = virCgroupAllowDevicePath(cgroup,
- def->fss[i]->src,
- def->fss[i]->readonly ?
- VIR_CGROUP_DEVICE_READ :
- VIR_CGROUP_DEVICE_RW);
- if (rc != 0) {
- virReportSystemError(-rc,
- _("Unable to allow device %s for domain %s"),
- def->fss[i]->src, def->name);
+ if (virCgroupAllowDevicePath(cgroup,
+ def->fss[i]->src,
+ def->fss[i]->readonly ?
+ VIR_CGROUP_DEVICE_READ :
+ VIR_CGROUP_DEVICE_RW) < 0)
goto cleanup;
- }
}
for (i = 0; i < def->nhostdevs; i++) {
@@ -520,14 +419,9 @@ static int virLXCCgroupSetupDeviceACL(virDomainDefPtr def,
}
}
- rc = virCgroupAllowDeviceMajor(cgroup, 'c', LXC_DEV_MAJ_PTY,
- VIR_CGROUP_DEVICE_RWM);
- if (rc != 0) {
- virReportSystemError(-rc,
- _("Unable to allow PTY devices for domain %s"),
- def->name);
+ if (virCgroupAllowDeviceMajor(cgroup, 'c', LXC_DEV_MAJ_PTY,
+ VIR_CGROUP_DEVICE_RWM) < 0)
goto cleanup;
- }
ret = 0;
cleanup:
@@ -600,18 +494,12 @@ virCgroupPtr virLXCCgroupJoin(virDomainDefPtr def)
{
virCgroupPtr cgroup = NULL;
int ret = -1;
- int rc;
if (!(cgroup = virLXCCgroupCreate(def, true)))
return NULL;
- rc = virCgroupAddTask(cgroup, getpid());
- if (rc != 0) {
- virReportSystemError(-rc,
- _("Unable to add task %d to cgroup for domain
%s"),
- getpid(), def->name);
+ if (virCgroupAddTask(cgroup, getpid()) < 0)
goto cleanup;
- }
ret = 0;
diff --git a/src/lxc/lxc_driver.c b/src/lxc/lxc_driver.c
index e005d8d..0fa98df 100644
--- a/src/lxc/lxc_driver.c
+++ b/src/lxc/lxc_driver.c
@@ -562,7 +562,7 @@ static int lxcDomainGetInfo(virDomainPtr dom,
virDomainInfoPtr info)
{
virDomainObjPtr vm;
- int ret = -1, rc;
+ int ret = -1;
virLXCDomainObjPrivatePtr priv;
if (!(vm = lxcDomObjFromDomain(dom)))
@@ -584,14 +584,12 @@ static int lxcDomainGetInfo(virDomainPtr dom,
"%s", _("Cannot read cputime for
domain"));
goto cleanup;
}
- if ((rc = virCgroupGetMemoryUsage(priv->cgroup, &(info->memory))) <
0) {
- virReportError(VIR_ERR_OPERATION_FAILED,
- "%s", _("Cannot read memory usage for
domain"));
- if (rc == -ENOENT) {
- /* Don't fail if we can't read memory usage due to a lack of
- * kernel support */
+ if (virCgroupGetMemoryUsage(priv->cgroup, &(info->memory)) < 0) {
+ /* Don't fail if we can't read memory usage due to a lack of
+ * kernel support */
+ if (virLastErrorIsSystemErrno(ENOENT))
info->memory = 0;
- } else
+ else
goto cleanup;
}
}
@@ -746,7 +744,6 @@ lxcDomainSetMemoryParameters(virDomainPtr dom,
size_t i;
virDomainObjPtr vm = NULL;
int ret = -1;
- int rc;
virLXCDomainObjPrivatePtr priv;
virCheckFlags(0, -1);
@@ -773,26 +770,14 @@ lxcDomainSetMemoryParameters(virDomainPtr dom,
virTypedParameterPtr param = ¶ms[i];
if (STREQ(param->field, VIR_DOMAIN_MEMORY_HARD_LIMIT)) {
- rc = virCgroupSetMemoryHardLimit(priv->cgroup, params[i].value.ul);
- if (rc != 0) {
- virReportSystemError(-rc, "%s",
- _("unable to set memory hard_limit
tunable"));
+ if (virCgroupSetMemoryHardLimit(priv->cgroup, params[i].value.ul) < 0)
ret = -1;
- }
} else if (STREQ(param->field, VIR_DOMAIN_MEMORY_SOFT_LIMIT)) {
- rc = virCgroupSetMemorySoftLimit(priv->cgroup, params[i].value.ul);
- if (rc != 0) {
- virReportSystemError(-rc, "%s",
- _("unable to set memory soft_limit
tunable"));
+ if (virCgroupSetMemorySoftLimit(priv->cgroup, params[i].value.ul) < 0)
ret = -1;
- }
} else if (STREQ(param->field, VIR_DOMAIN_MEMORY_SWAP_HARD_LIMIT)) {
- rc = virCgroupSetMemSwapHardLimit(priv->cgroup, params[i].value.ul);
- if (rc != 0) {
- virReportSystemError(-rc, "%s",
- _("unable to set swap_hard_limit
tunable"));
+ if (virCgroupSetMemSwapHardLimit(priv->cgroup, params[i].value.ul) <
0)
ret = -1;
- }
}
}
@@ -812,7 +797,6 @@ lxcDomainGetMemoryParameters(virDomainPtr dom,
virDomainObjPtr vm = NULL;
unsigned long long val;
int ret = -1;
- int rc;
virLXCDomainObjPrivatePtr priv;
virCheckFlags(0, -1);
@@ -838,34 +822,22 @@ lxcDomainGetMemoryParameters(virDomainPtr dom,
switch (i) {
case 0: /* fill memory hard limit here */
- rc = virCgroupGetMemoryHardLimit(priv->cgroup, &val);
- if (rc != 0) {
- virReportSystemError(-rc, "%s",
- _("unable to get memory hard limit"));
+ if (virCgroupGetMemoryHardLimit(priv->cgroup, &val) < 0)
goto cleanup;
- }
if (virTypedParameterAssign(param, VIR_DOMAIN_MEMORY_HARD_LIMIT,
VIR_TYPED_PARAM_ULLONG, val) < 0)
goto cleanup;
break;
case 1: /* fill memory soft limit here */
- rc = virCgroupGetMemorySoftLimit(priv->cgroup, &val);
- if (rc != 0) {
- virReportSystemError(-rc, "%s",
- _("unable to get memory soft limit"));
+ if (virCgroupGetMemorySoftLimit(priv->cgroup, &val) < 0)
goto cleanup;
- }
if (virTypedParameterAssign(param, VIR_DOMAIN_MEMORY_SOFT_LIMIT,
VIR_TYPED_PARAM_ULLONG, val) < 0)
goto cleanup;
break;
case 2: /* fill swap hard limit here */
- rc = virCgroupGetMemSwapHardLimit(priv->cgroup, &val);
- if (rc != 0) {
- virReportSystemError(-rc, "%s",
- _("unable to get swap hard limit"));
+ if (virCgroupGetMemSwapHardLimit(priv->cgroup, &val) < 0)
goto cleanup;
- }
if (virTypedParameterAssign(param,
VIR_DOMAIN_MEMORY_SWAP_HARD_LIMIT,
VIR_TYPED_PARAM_ULLONG, val) < 0)
@@ -1676,21 +1648,11 @@ static int
lxcGetVcpuBWLive(virCgroupPtr cgroup, unsigned long long *period,
long long *quota)
{
- int rc;
-
- rc = virCgroupGetCpuCfsPeriod(cgroup, period);
- if (rc < 0) {
- virReportSystemError(-rc, "%s",
- _("unable to get cpu bandwidth period tunable"));
+ if (virCgroupGetCpuCfsPeriod(cgroup, period) < 0)
return -1;
- }
- rc = virCgroupGetCpuCfsQuota(cgroup, quota);
- if (rc < 0) {
- virReportSystemError(-rc, "%s",
- _("unable to get cpu bandwidth tunable"));
+ if (virCgroupGetCpuCfsQuota(cgroup, quota) < 0)
return -1;
- }
return 0;
}
@@ -1699,7 +1661,6 @@ lxcGetVcpuBWLive(virCgroupPtr cgroup, unsigned long long *period,
static int lxcSetVcpuBWLive(virCgroupPtr cgroup, unsigned long long period,
long long quota)
{
- int rc;
unsigned long long old_period;
if (period == 0 && quota == 0)
@@ -1707,39 +1668,23 @@ static int lxcSetVcpuBWLive(virCgroupPtr cgroup, unsigned long
long period,
if (period) {
/* get old period, and we can rollback if set quota failed */
- rc = virCgroupGetCpuCfsPeriod(cgroup, &old_period);
- if (rc < 0) {
- virReportSystemError(-rc,
- "%s", _("Unable to get cpu bandwidth
period"));
+ if (virCgroupGetCpuCfsPeriod(cgroup, &old_period) < 0)
return -1;
- }
- rc = virCgroupSetCpuCfsPeriod(cgroup, period);
- if (rc < 0) {
- virReportSystemError(-rc,
- "%s", _("Unable to set cpu bandwidth
period"));
+ if (virCgroupSetCpuCfsPeriod(cgroup, period) < 0)
return -1;
- }
}
if (quota) {
- rc = virCgroupSetCpuCfsQuota(cgroup, quota);
- if (rc < 0) {
- virReportSystemError(-rc,
- "%s", _("Unable to set cpu bandwidth
quota"));
- goto cleanup;
- }
+ if (virCgroupSetCpuCfsQuota(cgroup, quota) < 0)
+ goto error;
}
return 0;
-cleanup:
- if (period) {
- rc = virCgroupSetCpuCfsPeriod(cgroup, old_period);
- if (rc < 0)
- virReportSystemError(-rc, "%s",
- _("Unable to rollback cpu bandwidth
period"));
- }
+error:
+ if (period)
+ virCgroupSetCpuCfsPeriod(cgroup, old_period);
return -1;
}
@@ -1808,12 +1753,8 @@ lxcDomainSetSchedulerParametersFlags(virDomainPtr dom,
if (STREQ(param->field, VIR_DOMAIN_SCHEDULER_CPU_SHARES)) {
if (flags & VIR_DOMAIN_AFFECT_LIVE) {
- rc = virCgroupSetCpuShares(priv->cgroup, params[i].value.ul);
- if (rc != 0) {
- virReportSystemError(-rc, "%s",
- _("unable to set cpu shares
tunable"));
+ if (virCgroupSetCpuShares(priv->cgroup, params[i].value.ul) < 0)
goto cleanup;
- }
vm->def->cputune.shares = params[i].value.ul;
}
@@ -1942,12 +1883,8 @@ lxcDomainGetSchedulerParametersFlags(virDomainPtr dom,
goto cleanup;
}
- rc = virCgroupGetCpuShares(priv->cgroup, &shares);
- if (rc != 0) {
- virReportSystemError(-rc, "%s",
- _("unable to get cpu shares tunable"));
+ if (virCgroupGetCpuShares(priv->cgroup, &shares) < 0)
goto cleanup;
- }
if (*nparams > 1 && cpu_bw_status) {
rc = lxcGetVcpuBWLive(priv->cgroup, &period, "a);
@@ -2047,20 +1984,14 @@ lxcDomainSetBlkioParameters(virDomainPtr dom,
virTypedParameterPtr param = ¶ms[i];
if (STREQ(param->field, VIR_DOMAIN_BLKIO_WEIGHT)) {
- int rc;
-
if (params[i].value.ui > 1000 || params[i].value.ui < 100) {
virReportError(VIR_ERR_INVALID_ARG, "%s",
_("out of blkio weight range."));
goto cleanup;
}
- rc = virCgroupSetBlkioWeight(priv->cgroup, params[i].value.ui);
- if (rc != 0) {
- virReportSystemError(-rc, "%s",
- _("unable to set blkio weight
tunable"));
+ if (virCgroupSetBlkioWeight(priv->cgroup, params[i].value.ui) < 0)
goto cleanup;
- }
}
}
}
@@ -2110,7 +2041,6 @@ lxcDomainGetBlkioParameters(virDomainPtr dom,
virDomainDefPtr persistentDef = NULL;
unsigned int val;
int ret = -1;
- int rc;
virLXCDomainObjPrivatePtr priv;
virCheckFlags(VIR_DOMAIN_AFFECT_LIVE |
@@ -2151,12 +2081,8 @@ lxcDomainGetBlkioParameters(virDomainPtr dom,
switch (i) {
case 0: /* fill blkio weight here */
- rc = virCgroupGetBlkioWeight(priv->cgroup, &val);
- if (rc != 0) {
- virReportSystemError(-rc, "%s",
- _("unable to get blkio weight"));
+ if (virCgroupGetBlkioWeight(priv->cgroup, &val) < 0)
goto cleanup;
- }
if (virTypedParameterAssign(param, VIR_DOMAIN_BLKIO_WEIGHT,
VIR_TYPED_PARAM_UINT, val) < 0)
goto cleanup;
diff --git a/src/qemu/qemu_cgroup.c b/src/qemu/qemu_cgroup.c
index 2df80bc..eed396f 100644
--- a/src/qemu/qemu_cgroup.c
+++ b/src/qemu/qemu_cgroup.c
@@ -54,25 +54,23 @@ qemuSetupDiskPathAllow(virDomainDiskDefPtr disk,
{
virDomainObjPtr vm = opaque;
qemuDomainObjPrivatePtr priv = vm->privateData;
- int rc;
+ int ret;
VIR_DEBUG("Process path %s for disk", path);
- rc = virCgroupAllowDevicePath(priv->cgroup, path,
+ ret = virCgroupAllowDevicePath(priv->cgroup, path,
(disk->readonly ? VIR_CGROUP_DEVICE_READ
: VIR_CGROUP_DEVICE_RW));
virDomainAuditCgroupPath(vm, priv->cgroup, "allow", path,
- disk->readonly ? "r" : "rw", rc);
- if (rc < 0) {
- if (rc == -EACCES) { /* Get this for root squash NFS */
- VIR_DEBUG("Ignoring EACCES for %s", path);
- } else {
- virReportSystemError(-rc,
- _("Unable to allow access for disk path %s"),
- path);
- return -1;
- }
+ disk->readonly ? "r" : "rw", ret ==
0);
+
+ /* Get this for root squash NFS */
+ if (ret < 0 &&
+ virLastErrorIsSystemErrno(EACCES)) {
+ VIR_DEBUG("Ignoring EACCES for %s", path);
+ virResetLastError();
+ ret = 0;
}
- return 0;
+ return ret;
}
@@ -98,23 +96,21 @@ qemuTeardownDiskPathDeny(virDomainDiskDefPtr disk ATTRIBUTE_UNUSED,
{
virDomainObjPtr vm = opaque;
qemuDomainObjPrivatePtr priv = vm->privateData;
- int rc;
+ int ret;
VIR_DEBUG("Process path %s for disk", path);
- rc = virCgroupDenyDevicePath(priv->cgroup, path,
- VIR_CGROUP_DEVICE_RWM);
- virDomainAuditCgroupPath(vm, priv->cgroup, "deny", path,
"rwm", rc);
- if (rc < 0) {
- if (rc == -EACCES) { /* Get this for root squash NFS */
- VIR_DEBUG("Ignoring EACCES for %s", path);
- } else {
- virReportSystemError(-rc,
- _("Unable to deny access for disk path %s"),
- path);
- return -1;
- }
+ ret = virCgroupDenyDevicePath(priv->cgroup, path,
+ VIR_CGROUP_DEVICE_RWM);
+ virDomainAuditCgroupPath(vm, priv->cgroup, "deny", path,
"rwm", ret == 0);
+
+ /* Get this for root squash NFS */
+ if (ret < 0 &&
+ virLastErrorIsSystemErrno(EACCES)) {
+ VIR_DEBUG("Ignoring EACCES for %s", path);
+ virResetLastError();
+ ret = 0;
}
- return 0;
+ return ret;
}
@@ -135,31 +131,25 @@ qemuTeardownDiskCgroup(virDomainObjPtr vm,
}
static int
-qemuSetupChrSourceCgroup(virDomainDefPtr def,
+qemuSetupChrSourceCgroup(virDomainDefPtr def ATTRIBUTE_UNUSED,
virDomainChrSourceDefPtr dev,
void *opaque)
{
virDomainObjPtr vm = opaque;
qemuDomainObjPrivatePtr priv = vm->privateData;
- int rc;
+ int ret;
if (dev->type != VIR_DOMAIN_CHR_TYPE_DEV)
return 0;
VIR_DEBUG("Process path '%s' for device", dev->data.file.path);
- rc = virCgroupAllowDevicePath(priv->cgroup, dev->data.file.path,
- VIR_CGROUP_DEVICE_RW);
+ ret = virCgroupAllowDevicePath(priv->cgroup, dev->data.file.path,
+ VIR_CGROUP_DEVICE_RW);
virDomainAuditCgroupPath(vm, priv->cgroup, "allow",
- dev->data.file.path, "rw", rc);
- if (rc < 0) {
- virReportSystemError(-rc,
- _("Unable to allow device %s for %s"),
- dev->data.file.path, def->name);
- return -1;
- }
+ dev->data.file.path, "rw", ret == 0);
- return 0;
+ return ret;
}
static int
@@ -176,18 +166,18 @@ qemuSetupTPMCgroup(virDomainDefPtr def,
virDomainTPMDefPtr dev,
void *opaque)
{
- int rc = 0;
+ int ret = 0;
switch (dev->type) {
case VIR_DOMAIN_TPM_TYPE_PASSTHROUGH:
- rc = qemuSetupChrSourceCgroup(def, &dev->data.passthrough.source,
- opaque);
+ ret = qemuSetupChrSourceCgroup(def, &dev->data.passthrough.source,
+ opaque);
break;
case VIR_DOMAIN_TPM_TYPE_LAST:
break;
}
- return rc;
+ return ret;
}
@@ -198,20 +188,14 @@ qemuSetupHostUsbDeviceCgroup(virUSBDevicePtr dev ATTRIBUTE_UNUSED,
{
virDomainObjPtr vm = opaque;
qemuDomainObjPrivatePtr priv = vm->privateData;
- int rc;
+ int ret;
VIR_DEBUG("Process path '%s' for USB device", path);
- rc = virCgroupAllowDevicePath(priv->cgroup, path,
+ ret = virCgroupAllowDevicePath(priv->cgroup, path,
VIR_CGROUP_DEVICE_RW);
- virDomainAuditCgroupPath(vm, priv->cgroup, "allow", path,
"rw", rc);
- if (rc < 0) {
- virReportSystemError(-rc,
- _("Unable to allow device %s"),
- path);
- return -1;
- }
+ virDomainAuditCgroupPath(vm, priv->cgroup, "allow", path,
"rw", ret == 0);
- return 0;
+ return ret;
}
static int
@@ -221,25 +205,19 @@ qemuSetupHostScsiDeviceCgroup(virSCSIDevicePtr dev
ATTRIBUTE_UNUSED,
{
virDomainObjPtr vm = opaque;
qemuDomainObjPrivatePtr priv = vm->privateData;
- int rc;
+ int ret;
VIR_DEBUG("Process path '%s' for SCSI device", path);
- rc = virCgroupAllowDevicePath(priv->cgroup, path,
- virSCSIDeviceGetReadonly(dev) ?
- VIR_CGROUP_DEVICE_READ :
- VIR_CGROUP_DEVICE_RW);
+ ret = virCgroupAllowDevicePath(priv->cgroup, path,
+ virSCSIDeviceGetReadonly(dev) ?
+ VIR_CGROUP_DEVICE_READ :
+ VIR_CGROUP_DEVICE_RW);
virDomainAuditCgroupPath(vm, priv->cgroup, "allow", path,
- virSCSIDeviceGetReadonly(dev) ? "r" :
"rw", rc);
- if (rc < 0) {
- virReportSystemError(-rc,
- _("Unable to allow device %s"),
- path);
- return -1;
- }
+ virSCSIDeviceGetReadonly(dev) ? "r" :
"rw", ret == 0);
- return 0;
+ return ret;
}
int
@@ -267,7 +245,7 @@ qemuSetupHostdevCGroup(virDomainObjPtr vm,
case VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_PCI:
if (dev->source.subsys.u.pci.backend
== VIR_DOMAIN_HOSTDEV_PCI_BACKEND_VFIO) {
- int rc;
+ int rv;
pci = virPCIDeviceNew(dev->source.subsys.u.pci.addr.domain,
dev->source.subsys.u.pci.addr.bus,
@@ -280,17 +258,12 @@ qemuSetupHostdevCGroup(virDomainObjPtr vm,
goto cleanup;
VIR_DEBUG("Cgroup allow %s for PCI device assignment", path);
- rc = virCgroupAllowDevicePath(priv->cgroup, path,
+ rv = virCgroupAllowDevicePath(priv->cgroup, path,
VIR_CGROUP_DEVICE_RW);
virDomainAuditCgroupPath(vm, priv->cgroup,
- "allow", path, "rw", rc);
- if (rc < 0) {
- virReportSystemError(-rc,
- _("Unable to allow access "
- "for device path %s"),
- path);
+ "allow", path, "rw", rv ==
0);
+ if (rv < 0)
goto cleanup;
- }
}
break;
@@ -366,7 +339,7 @@ qemuTeardownHostdevCgroup(virDomainObjPtr vm,
case VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_PCI:
if (dev->source.subsys.u.pci.backend
== VIR_DOMAIN_HOSTDEV_PCI_BACKEND_VFIO) {
- int rc;
+ int rv;
pci = virPCIDeviceNew(dev->source.subsys.u.pci.addr.domain,
dev->source.subsys.u.pci.addr.bus,
@@ -379,17 +352,12 @@ qemuTeardownHostdevCgroup(virDomainObjPtr vm,
goto cleanup;
VIR_DEBUG("Cgroup deny %s for PCI device assignment", path);
- rc = virCgroupDenyDevicePath(priv->cgroup, path,
+ rv = virCgroupDenyDevicePath(priv->cgroup, path,
VIR_CGROUP_DEVICE_RWM);
virDomainAuditCgroupPath(vm, priv->cgroup,
- "deny", path, "rwm", rc);
- if (rc < 0) {
- virReportSystemError(-rc,
- _("Unable to deny access "
- "for device path %s"),
- path);
+ "deny", path, "rwm", rv ==
0);
+ if (rv < 0)
goto cleanup;
- }
}
break;
case VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_USB:
@@ -411,7 +379,6 @@ static int
qemuSetupBlkioCgroup(virDomainObjPtr vm)
{
qemuDomainObjPrivatePtr priv = vm->privateData;
- int rc = -1;
size_t i;
if (!virCgroupHasController(priv->cgroup,
@@ -425,30 +392,18 @@ qemuSetupBlkioCgroup(virDomainObjPtr vm)
}
}
- if (vm->def->blkio.weight != 0) {
- rc = virCgroupSetBlkioWeight(priv->cgroup, vm->def->blkio.weight);
- if (rc != 0) {
- virReportSystemError(-rc,
- _("Unable to set io weight for domain %s"),
- vm->def->name);
- return -1;
- }
- }
+ if (vm->def->blkio.weight != 0 &&
+ virCgroupSetBlkioWeight(priv->cgroup, vm->def->blkio.weight) < 0)
+ return -1;
if (vm->def->blkio.ndevices) {
for (i = 0; i < vm->def->blkio.ndevices; i++) {
virBlkioDeviceWeightPtr dw = &vm->def->blkio.devices[i];
if (!dw->weight)
continue;
- rc = virCgroupSetBlkioDeviceWeight(priv->cgroup, dw->path,
- dw->weight);
- if (rc != 0) {
- virReportSystemError(-rc,
- _("Unable to set io device weight "
- "for domain %s"),
- vm->def->name);
+ if (virCgroupSetBlkioDeviceWeight(priv->cgroup, dw->path,
+ dw->weight) < 0)
return -1;
- }
}
}
@@ -460,7 +415,6 @@ static int
qemuSetupMemoryCgroup(virDomainObjPtr vm)
{
qemuDomainObjPrivatePtr priv = vm->privateData;
- int rc;
if (!virCgroupHasController(priv->cgroup,VIR_CGROUP_CONTROLLER_MEMORY)) {
if (vm->def->mem.hard_limit != 0 ||
@@ -474,33 +428,17 @@ qemuSetupMemoryCgroup(virDomainObjPtr vm)
}
}
- rc = virCgroupSetMemoryHardLimit(priv->cgroup,
- qemuDomainMemoryLimit(vm->def));
- if (rc != 0) {
- virReportSystemError(-rc,
- _("Unable to set memory hard limit for domain
%s"),
- vm->def->name);
+ if (virCgroupSetMemoryHardLimit(priv->cgroup,
+ qemuDomainMemoryLimit(vm->def)) < 0)
return -1;
- }
- if (vm->def->mem.soft_limit != 0) {
- rc = virCgroupSetMemorySoftLimit(priv->cgroup,
vm->def->mem.soft_limit);
- if (rc != 0) {
- virReportSystemError(-rc,
- _("Unable to set memory soft limit for domain
%s"),
- vm->def->name);
- return -1;
- }
- }
- if (vm->def->mem.swap_hard_limit != 0) {
- rc = virCgroupSetMemSwapHardLimit(priv->cgroup,
vm->def->mem.swap_hard_limit);
- if (rc != 0) {
- virReportSystemError(-rc,
- _("Unable to set swap hard limit for domain
%s"),
- vm->def->name);
- return -1;
- }
- }
+ if (vm->def->mem.soft_limit != 0 &&
+ virCgroupSetMemorySoftLimit(priv->cgroup, vm->def->mem.soft_limit) <
0)
+ return -1;
+
+ if (vm->def->mem.swap_hard_limit != 0 &&
+ virCgroupSetMemSwapHardLimit(priv->cgroup, vm->def->mem.swap_hard_limit)
< 0)
+ return -1;
return 0;
}
@@ -513,23 +451,22 @@ qemuSetupDevicesCgroup(virQEMUDriverPtr driver,
qemuDomainObjPrivatePtr priv = vm->privateData;
virQEMUDriverConfigPtr cfg = NULL;
const char *const *deviceACL = NULL;
- int rc = -1;
+ int rv = -1;
int ret = -1;
size_t i;
if (!virCgroupHasController(priv->cgroup, VIR_CGROUP_CONTROLLER_DEVICES))
return 0;
- rc = virCgroupDenyAllDevices(priv->cgroup);
- virDomainAuditCgroup(vm, priv->cgroup, "deny", "all", rc ==
0);
- if (rc != 0) {
- if (rc == -EPERM) {
+ rv = virCgroupDenyAllDevices(priv->cgroup);
+ virDomainAuditCgroup(vm, priv->cgroup, "deny", "all", rv ==
0);
+ if (rv < 0) {
+ if (virLastErrorIsSystemErrno(EPERM)) {
+ virResetLastError();
VIR_WARN("Group devices ACL is not accessible, disabling
whitelisting");
return 0;
}
- virReportSystemError(-rc,
- _("Unable to deny all devices for %s"),
vm->def->name);
goto cleanup;
}
@@ -538,15 +475,12 @@ qemuSetupDevicesCgroup(virQEMUDriverPtr driver,
goto cleanup;
}
- rc = virCgroupAllowDeviceMajor(priv->cgroup, 'c', DEVICE_PTY_MAJOR,
+ rv = virCgroupAllowDeviceMajor(priv->cgroup, 'c', DEVICE_PTY_MAJOR,
VIR_CGROUP_DEVICE_RW);
virDomainAuditCgroupMajor(vm, priv->cgroup, "allow", DEVICE_PTY_MAJOR,
- "pty", "rw", rc == 0);
- if (rc != 0) {
- virReportSystemError(-rc, "%s",
- _("unable to allow /dev/pts/ devices"));
+ "pty", "rw", rv == 0);
+ if (rv < 0)
goto cleanup;
- }
cfg = virQEMUDriverGetConfig(driver);
deviceACL = cfg->cgroupDeviceACL ?
@@ -558,15 +492,12 @@ qemuSetupDevicesCgroup(virQEMUDriverPtr driver,
((vm->def->graphics[0]->type == VIR_DOMAIN_GRAPHICS_TYPE_VNC
&&
cfg->vncAllowHostAudio) ||
(vm->def->graphics[0]->type == VIR_DOMAIN_GRAPHICS_TYPE_SDL)))) {
- rc = virCgroupAllowDeviceMajor(priv->cgroup, 'c', DEVICE_SND_MAJOR,
+ rv = virCgroupAllowDeviceMajor(priv->cgroup, 'c', DEVICE_SND_MAJOR,
VIR_CGROUP_DEVICE_RW);
virDomainAuditCgroupMajor(vm, priv->cgroup, "allow",
DEVICE_SND_MAJOR,
- "sound", "rw", rc == 0);
- if (rc != 0) {
- virReportSystemError(-rc, "%s",
- _("unable to allow /dev/snd/ devices"));
+ "sound", "rw", rv == 0);
+ if (rv < 0)
goto cleanup;
- }
}
for (i = 0; deviceACL[i] != NULL; i++) {
@@ -576,16 +507,12 @@ qemuSetupDevicesCgroup(virQEMUDriverPtr driver,
continue;
}
- rc = virCgroupAllowDevicePath(priv->cgroup, deviceACL[i],
+ rv = virCgroupAllowDevicePath(priv->cgroup, deviceACL[i],
VIR_CGROUP_DEVICE_RW);
- virDomainAuditCgroupPath(vm, priv->cgroup, "allow", deviceACL[i],
"rw", rc);
- if (rc < 0 &&
- rc != -ENOENT) {
- virReportSystemError(-rc,
- _("unable to allow device %s"),
- deviceACL[i]);
+ virDomainAuditCgroupPath(vm, priv->cgroup, "allow", deviceACL[i],
"rw", rv == 0);
+ if (rv < 0 &&
+ !virLastErrorIsSystemErrno(ENOENT))
goto cleanup;
- }
}
if (virDomainChrDefForeach(vm->def,
@@ -620,7 +547,6 @@ qemuSetupCpusetCgroup(virDomainObjPtr vm,
qemuDomainObjPrivatePtr priv = vm->privateData;
char *mem_mask = NULL;
char *cpu_mask = NULL;
- int rc;
int ret = -1;
if (!virCgroupHasController(priv->cgroup, VIR_CGROUP_CONTROLLER_CPUSET))
@@ -643,14 +569,8 @@ qemuSetupCpusetCgroup(virDomainObjPtr vm,
goto cleanup;
}
- rc = virCgroupSetCpusetMems(priv->cgroup, mem_mask);
-
- if (rc != 0) {
- virReportSystemError(-rc,
- _("Unable to set cpuset.mems for domain %s"),
- vm->def->name);
+ if (virCgroupSetCpusetMems(priv->cgroup, mem_mask) < 0)
goto cleanup;
- }
}
if (vm->def->cpumask ||
@@ -672,12 +592,8 @@ qemuSetupCpusetCgroup(virDomainObjPtr vm,
goto cleanup;
}
- if ((rc = virCgroupSetCpusetCpus(priv->cgroup, cpu_mask)) != 0) {
- virReportSystemError(-rc,
- _("Unable to set cpuset.cpus for domain %s"),
- vm->def->name);
+ if (virCgroupSetCpusetCpus(priv->cgroup, cpu_mask) < 0)
goto cleanup;
- }
}
ret = 0;
@@ -692,7 +608,6 @@ static int
qemuSetupCpuCgroup(virDomainObjPtr vm)
{
qemuDomainObjPrivatePtr priv = vm->privateData;
- int rc = -1;
if (!virCgroupHasController(priv->cgroup, VIR_CGROUP_CONTROLLER_CPU)) {
if (vm->def->cputune.shares) {
@@ -704,15 +619,9 @@ qemuSetupCpuCgroup(virDomainObjPtr vm)
}
}
- if (vm->def->cputune.shares) {
- rc = virCgroupSetCpuShares(priv->cgroup, vm->def->cputune.shares);
- if (rc != 0) {
- virReportSystemError(-rc,
- _("Unable to set io cpu shares for domain
%s"),
- vm->def->name);
- return -1;
- }
- }
+ if (vm->def->cputune.shares &&
+ virCgroupSetCpuShares(priv->cgroup, vm->def->cputune.shares) < 0)
+ return -1;
return 0;
}
@@ -723,7 +632,7 @@ qemuInitCgroup(virQEMUDriverPtr driver,
virDomainObjPtr vm,
bool startup)
{
- int rc = -1;
+ int ret = -1;
qemuDomainObjPrivatePtr priv = vm->privateData;
virCgroupPtr parent = NULL;
virQEMUDriverConfigPtr cfg = virQEMUDriverGetConfig(driver);
@@ -795,11 +704,11 @@ qemuInitCgroup(virQEMUDriverPtr driver,
}
done:
- rc = 0;
+ ret = 0;
cleanup:
virCgroupFree(&parent);
virObjectUnref(cfg);
- return rc;
+ return ret;
}
@@ -847,7 +756,6 @@ qemuSetupCgroupVcpuBW(virCgroupPtr cgroup,
unsigned long long period,
long long quota)
{
- int rc;
unsigned long long old_period;
if (period == 0 && quota == 0)
@@ -855,39 +763,22 @@ qemuSetupCgroupVcpuBW(virCgroupPtr cgroup,
if (period) {
/* get old period, and we can rollback if set quota failed */
- rc = virCgroupGetCpuCfsPeriod(cgroup, &old_period);
- if (rc < 0) {
- virReportSystemError(-rc,
- "%s", _("Unable to get cpu bandwidth
period"));
+ if (virCgroupGetCpuCfsPeriod(cgroup, &old_period) < 0)
return -1;
- }
- rc = virCgroupSetCpuCfsPeriod(cgroup, period);
- if (rc < 0) {
- virReportSystemError(-rc,
- "%s", _("Unable to set cpu bandwidth
period"));
+ if (virCgroupSetCpuCfsPeriod(cgroup, period) < 0)
return -1;
- }
}
- if (quota) {
- rc = virCgroupSetCpuCfsQuota(cgroup, quota);
- if (rc < 0) {
- virReportSystemError(-rc,
- "%s", _("Unable to set cpu bandwidth
quota"));
- goto cleanup;
- }
- }
+ if (quota &&
+ virCgroupSetCpuCfsQuota(cgroup, quota) < 0)
+ goto error;
return 0;
-cleanup:
- if (period) {
- rc = virCgroupSetCpuCfsPeriod(cgroup, old_period);
- if (rc < 0)
- virReportSystemError(-rc, "%s",
- _("Unable to rollback cpu bandwidth
period"));
- }
+error:
+ if (period)
+ ignore_value(virCgroupSetCpuCfsPeriod(cgroup, old_period));
return -1;
}
@@ -913,28 +804,23 @@ int
qemuSetupCgroupEmulatorPin(virCgroupPtr cgroup,
virBitmapPtr cpumask)
{
- int rc = 0;
+ int ret = -1;
char *new_cpus = NULL;
new_cpus = virBitmapFormat(cpumask);
if (!new_cpus) {
virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
_("failed to convert cpu mask"));
- rc = -1;
goto cleanup;
}
- rc = virCgroupSetCpusetCpus(cgroup, new_cpus);
- if (rc < 0) {
- virReportSystemError(-rc,
- "%s",
- _("Unable to set cpuset.cpus"));
+ if (virCgroupSetCpusetCpus(cgroup, new_cpus) < 0)
goto cleanup;
- }
+ ret = 0;
cleanup:
VIR_FREE(new_cpus);
- return rc;
+ return ret;
}
int
@@ -943,7 +829,6 @@ qemuSetupCgroupForVcpu(virDomainObjPtr vm)
virCgroupPtr cgroup_vcpu = NULL;
qemuDomainObjPrivatePtr priv = vm->privateData;
virDomainDefPtr def = vm->def;
- int rc;
size_t i, j;
unsigned long long period = vm->def->cputune.period;
long long quota = vm->def->cputune.quota;
@@ -975,13 +860,8 @@ qemuSetupCgroupForVcpu(virDomainObjPtr vm)
goto cleanup;
/* move the thread for vcpu to sub dir */
- rc = virCgroupAddTask(cgroup_vcpu, priv->vcpupids[i]);
- if (rc < 0) {
- virReportSystemError(-rc,
- _("unable to add vcpu %zu task %d to
cgroup"),
- i, priv->vcpupids[i]);
+ if (virCgroupAddTask(cgroup_vcpu, priv->vcpupids[i]) < 0)
goto cleanup;
- }
if (period || quota) {
if (qemuSetupCgroupVcpuBW(cgroup_vcpu, period, quota) < 0)
@@ -1032,7 +912,6 @@ qemuSetupCgroupForEmulator(virQEMUDriverPtr driver,
qemuDomainObjPrivatePtr priv = vm->privateData;
unsigned long long period = vm->def->cputune.emulator_period;
long long quota = vm->def->cputune.emulator_quota;
- int rc = -1;
if ((period || quota) &&
!virCgroupHasController(priv->cgroup, VIR_CGROUP_CONTROLLER_CPU)) {
@@ -1047,14 +926,8 @@ qemuSetupCgroupForEmulator(virQEMUDriverPtr driver,
if (virCgroupNewEmulator(priv->cgroup, true, &cgroup_emulator) < 0)
goto cleanup;
- rc = virCgroupMoveTask(priv->cgroup, cgroup_emulator);
- if (rc < 0) {
- virReportSystemError(-rc,
- _("Unable to move tasks from domain cgroup to "
- "emulator cgroup for %s"),
- vm->def->name);
+ if (virCgroupMoveTask(priv->cgroup, cgroup_emulator) < 0)
goto cleanup;
- }
if (def->placement_mode == VIR_DOMAIN_CPU_PLACEMENT_MODE_AUTO) {
if (!(cpumap = qemuPrepareCpumap(driver, nodemask)))
@@ -1067,20 +940,16 @@ qemuSetupCgroupForEmulator(virQEMUDriverPtr driver,
}
if (cpumask) {
- if (virCgroupHasController(priv->cgroup, VIR_CGROUP_CONTROLLER_CPUSET)) {
- rc = qemuSetupCgroupEmulatorPin(cgroup_emulator, cpumask);
- if (rc < 0)
- goto cleanup;
- }
- cpumask = NULL; /* sanity */
+ if (virCgroupHasController(priv->cgroup, VIR_CGROUP_CONTROLLER_CPUSET)
&&
+ qemuSetupCgroupEmulatorPin(cgroup_emulator, cpumask) < 0)
+ goto cleanup;
}
if (period || quota) {
- if (virCgroupHasController(priv->cgroup, VIR_CGROUP_CONTROLLER_CPU)) {
- if ((rc = qemuSetupCgroupVcpuBW(cgroup_emulator, period,
- quota)) < 0)
- goto cleanup;
- }
+ if (virCgroupHasController(priv->cgroup, VIR_CGROUP_CONTROLLER_CPU)
&&
+ qemuSetupCgroupVcpuBW(cgroup_emulator, period,
+ quota) < 0)
+ goto cleanup;
}
virCgroupFree(&cgroup_emulator);
@@ -1095,7 +964,7 @@ cleanup:
virCgroupFree(&cgroup_emulator);
}
- return rc;
+ return -1;
}
int
@@ -1113,18 +982,12 @@ int
qemuAddToCgroup(virDomainObjPtr vm)
{
qemuDomainObjPrivatePtr priv = vm->privateData;
- int rc;
if (priv->cgroup == NULL)
return 0; /* Not supported, so claim success */
- rc = virCgroupAddTask(priv->cgroup, getpid());
- if (rc != 0) {
- virReportSystemError(-rc,
- _("unable to add domain %s task %d to cgroup"),
- vm->def->name, getpid());
+ if (virCgroupAddTask(priv->cgroup, getpid()) < 0)
return -1;
- }
return 0;
}
diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c
index e88267c..9bbc5d6 100644
--- a/src/qemu/qemu_driver.c
+++ b/src/qemu/qemu_driver.c
@@ -7749,7 +7749,6 @@ qemuDomainSetBlkioParameters(virDomainPtr dom,
ret = 0;
if (flags & VIR_DOMAIN_AFFECT_LIVE) {
for (i = 0; i < nparams; i++) {
- int rc;
virTypedParameterPtr param = ¶ms[i];
if (STREQ(param->field, VIR_DOMAIN_BLKIO_WEIGHT)) {
@@ -7760,12 +7759,8 @@ qemuDomainSetBlkioParameters(virDomainPtr dom,
continue;
}
- rc = virCgroupSetBlkioWeight(priv->cgroup, params[i].value.ui);
- if (rc != 0) {
- virReportSystemError(-rc, "%s",
- _("unable to set blkio weight
tunable"));
+ if (virCgroupSetBlkioWeight(priv->cgroup, params[i].value.ui) < 0)
ret = -1;
- }
} else if (STREQ(param->field, VIR_DOMAIN_BLKIO_DEVICE_WEIGHT)) {
size_t ndevices;
virBlkioDeviceWeightPtr devices = NULL;
@@ -7778,14 +7773,10 @@ qemuDomainSetBlkioParameters(virDomainPtr dom,
continue;
}
for (j = 0; j < ndevices; j++) {
- rc = virCgroupSetBlkioDeviceWeight(priv->cgroup,
- devices[j].path,
- devices[j].weight);
- if (rc < 0) {
- virReportSystemError(-rc,
- _("Unable to set io device weight
"
- "for path %s"),
- devices[j].path);
+ if (virCgroupSetBlkioDeviceWeight(priv->cgroup,
+ devices[j].path,
+ devices[j].weight) < 0) {
+ ret = -1;
break;
}
}
@@ -7860,7 +7851,6 @@ qemuDomainGetBlkioParameters(virDomainPtr dom,
virDomainDefPtr persistentDef = NULL;
unsigned int val;
int ret = -1;
- int rc;
virCapsPtr caps = NULL;
qemuDomainObjPrivatePtr priv;
@@ -7910,12 +7900,8 @@ qemuDomainGetBlkioParameters(virDomainPtr dom,
switch (i) {
case 0: /* fill blkio weight here */
- rc = virCgroupGetBlkioWeight(priv->cgroup, &val);
- if (rc != 0) {
- virReportSystemError(-rc, "%s",
- _("unable to get blkio weight"));
+ if (virCgroupGetBlkioWeight(priv->cgroup, &val) < 0)
goto cleanup;
- }
if (virTypedParameterAssign(param, VIR_DOMAIN_BLKIO_WEIGHT,
VIR_TYPED_PARAM_UINT, val) < 0)
goto cleanup;
@@ -8040,8 +8026,8 @@ qemuDomainSetMemoryParameters(virDomainPtr dom,
bool set_hard_limit = false;
bool set_soft_limit = false;
virQEMUDriverConfigPtr cfg = NULL;
- int ret = -1;
int rc;
+ int ret = -1;
virCapsPtr caps = NULL;
qemuDomainObjPrivatePtr priv;
@@ -8173,7 +8159,6 @@ qemuDomainGetMemoryParameters(virDomainPtr dom,
virDomainObjPtr vm = NULL;
virDomainDefPtr persistentDef = NULL;
int ret = -1;
- int rc;
virCapsPtr caps = NULL;
qemuDomainObjPrivatePtr priv;
@@ -8257,12 +8242,8 @@ qemuDomainGetMemoryParameters(virDomainPtr dom,
switch (i) {
case 0: /* fill memory hard limit here */
- rc = virCgroupGetMemoryHardLimit(priv->cgroup, &val);
- if (rc != 0) {
- virReportSystemError(-rc, "%s",
- _("unable to get memory hard limit"));
+ if (virCgroupGetMemoryHardLimit(priv->cgroup, &val) < 0)
goto cleanup;
- }
if (virTypedParameterAssign(param,
VIR_DOMAIN_MEMORY_HARD_LIMIT,
VIR_TYPED_PARAM_ULLONG, val) < 0)
@@ -8270,12 +8251,8 @@ qemuDomainGetMemoryParameters(virDomainPtr dom,
break;
case 1: /* fill memory soft limit here */
- rc = virCgroupGetMemorySoftLimit(priv->cgroup, &val);
- if (rc != 0) {
- virReportSystemError(-rc, "%s",
- _("unable to get memory soft limit"));
+ if (virCgroupGetMemorySoftLimit(priv->cgroup, &val) < 0)
goto cleanup;
- }
if (virTypedParameterAssign(param,
VIR_DOMAIN_MEMORY_SOFT_LIMIT,
VIR_TYPED_PARAM_ULLONG, val) < 0)
@@ -8283,13 +8260,9 @@ qemuDomainGetMemoryParameters(virDomainPtr dom,
break;
case 2: /* fill swap hard limit here */
- rc = virCgroupGetMemSwapHardLimit(priv->cgroup, &val);
- if (rc != 0) {
- if (rc != -ENOENT) {
- virReportSystemError(-rc, "%s",
- _("unable to get swap hard limit"));
+ if (virCgroupGetMemSwapHardLimit(priv->cgroup, &val) < 0) {
+ if (!virLastErrorIsSystemErrno(ENOENT))
goto cleanup;
- }
val = VIR_DOMAIN_MEMORY_PARAM_UNLIMITED;
}
if (virTypedParameterAssign(param,
@@ -8382,7 +8355,6 @@ qemuDomainSetNumaParameters(virDomainPtr dom,
persistentDef->numatune.memory.mode = params[i].value.i;
}
} else if (STREQ(param->field, VIR_DOMAIN_NUMA_NODESET)) {
- int rc;
virBitmapPtr nodeset = NULL;
char *nodeset_str = NULL;
@@ -8415,9 +8387,7 @@ qemuDomainSetNumaParameters(virDomainPtr dom,
continue;
}
- if ((rc = virCgroupSetCpusetMems(priv->cgroup, nodeset_str)) != 0) {
- virReportSystemError(-rc, "%s",
- _("unable to set numa tunable"));
+ if (virCgroupSetCpusetMems(priv->cgroup, nodeset_str) < 0) {
virBitmapFree(nodeset);
VIR_FREE(nodeset_str);
ret = -1;
@@ -8474,7 +8444,6 @@ qemuDomainGetNumaParameters(virDomainPtr dom,
virDomainDefPtr persistentDef = NULL;
char *nodeset = NULL;
int ret = -1;
- int rc;
virCapsPtr caps = NULL;
qemuDomainObjPrivatePtr priv;
@@ -8536,12 +8505,8 @@ qemuDomainGetNumaParameters(virDomainPtr dom,
if (!nodeset && VIR_STRDUP(nodeset, "") < 0)
goto cleanup;
} else {
- rc = virCgroupGetCpusetMems(priv->cgroup, &nodeset);
- if (rc != 0) {
- virReportSystemError(-rc, "%s",
- _("unable to get numa nodeset"));
+ if (virCgroupGetCpusetMems(priv->cgroup, &nodeset) < 0)
goto cleanup;
- }
}
if (virTypedParameterAssign(param, VIR_DOMAIN_NUMA_NODESET,
VIR_TYPED_PARAM_STRING, nodeset) < 0)
@@ -8712,11 +8677,8 @@ qemuDomainSetSchedulerParametersFlags(virDomainPtr dom,
if (STREQ(param->field, VIR_DOMAIN_SCHEDULER_CPU_SHARES)) {
if (flags & VIR_DOMAIN_AFFECT_LIVE) {
- if ((rc = virCgroupSetCpuShares(priv->cgroup, value_ul))) {
- virReportSystemError(-rc, "%s",
- _("unable to set cpu shares
tunable"));
+ if (virCgroupSetCpuShares(priv->cgroup, value_ul) < 0)
goto cleanup;
- }
vm->def->cputune.shares = value_ul;
}
@@ -8823,21 +8785,11 @@ static int
qemuGetVcpuBWLive(virCgroupPtr cgroup, unsigned long long *period,
long long *quota)
{
- int rc;
-
- rc = virCgroupGetCpuCfsPeriod(cgroup, period);
- if (rc < 0) {
- virReportSystemError(-rc, "%s",
- _("unable to get cpu bandwidth period tunable"));
+ if (virCgroupGetCpuCfsPeriod(cgroup, period) < 0)
return -1;
- }
- rc = virCgroupGetCpuCfsQuota(cgroup, quota);
- if (rc < 0) {
- virReportSystemError(-rc, "%s",
- _("unable to get cpu bandwidth tunable"));
+ if (virCgroupGetCpuCfsQuota(cgroup, quota) < 0)
return -1;
- }
return 0;
}
@@ -8979,12 +8931,8 @@ qemuDomainGetSchedulerParametersFlags(virDomainPtr dom,
goto cleanup;
}
- rc = virCgroupGetCpuShares(priv->cgroup, &shares);
- if (rc != 0) {
- virReportSystemError(-rc, "%s",
- _("unable to get cpu shares tunable"));
+ if (virCgroupGetCpuShares(priv->cgroup, &shares) < 0)
goto cleanup;
- }
if (*nparams > 1 && cpu_bw_status) {
rc = qemuGetVcpusBWLive(vm, &period, "a);
diff --git a/src/qemu/qemu_migration.c b/src/qemu/qemu_migration.c
index d285aa1..3dedfe8 100644
--- a/src/qemu/qemu_migration.c
+++ b/src/qemu/qemu_migration.c
@@ -4522,8 +4522,8 @@ qemuMigrationToFile(virQEMUDriverPtr driver, virDomainObjPtr vm,
enum qemuDomainAsyncJob asyncJob)
{
qemuDomainObjPrivatePtr priv = vm->privateData;
- int ret = -1;
int rc;
+ int ret = -1;
bool restoreLabel = false;
virCommandPtr cmd = NULL;
int pipeFD[2] = { -1, -1 };
@@ -4557,15 +4557,12 @@ qemuMigrationToFile(virQEMUDriverPtr driver, virDomainObjPtr vm,
* that botches pclose. */
if (virCgroupHasController(priv->cgroup,
VIR_CGROUP_CONTROLLER_DEVICES)) {
- rc = virCgroupAllowDevicePath(priv->cgroup, path,
- VIR_CGROUP_DEVICE_RW);
- virDomainAuditCgroupPath(vm, priv->cgroup, "allow", path,
"rw", rc);
- if (rc == 1) {
+ int rv = virCgroupAllowDevicePath(priv->cgroup, path,
+ VIR_CGROUP_DEVICE_RW);
+ virDomainAuditCgroupPath(vm, priv->cgroup, "allow", path,
"rw", rv == 0);
+ if (rv == 1) {
/* path was not a device, no further need for cgroup */
- } else if (rc < 0) {
- virReportSystemError(-rc,
- _("Unable to allow device %s for %s"),
- path, vm->def->name);
+ } else if (rv < 0) {
goto cleanup;
}
}
@@ -4664,12 +4661,9 @@ cleanup:
if (virCgroupHasController(priv->cgroup,
VIR_CGROUP_CONTROLLER_DEVICES)) {
- rc = virCgroupDenyDevicePath(priv->cgroup, path,
- VIR_CGROUP_DEVICE_RWM);
- virDomainAuditCgroupPath(vm, priv->cgroup, "deny", path,
"rwm", rc);
- if (rc < 0)
- VIR_WARN("Unable to deny device %s for %s %d",
- path, vm->def->name, rc);
+ int rv = virCgroupDenyDevicePath(priv->cgroup, path,
+ VIR_CGROUP_DEVICE_RWM);
+ virDomainAuditCgroupPath(vm, priv->cgroup, "deny", path,
"rwm", rv == 0);
}
return ret;
}
Daniel
--
|:
http://berrange.com -o-
http://www.flickr.com/photos/dberrange/ :|
|:
http://libvirt.org -o-
http://virt-manager.org :|
|:
http://autobuild.org -o-
http://search.cpan.org/~danberr/ :|
|:
http://entangle-photo.org -o-
http://live.gnome.org/gtk-vnc :|