]> git.ipfire.org Git - thirdparty/libvirt.git/commitdiff
qemu: Sync BlkioDevice values when setting them in cgroups
authorMartin Kletzander <mkletzan@redhat.com>
Mon, 3 Aug 2015 13:56:20 +0000 (15:56 +0200)
committerMartin Kletzander <mkletzan@redhat.com>
Tue, 18 Aug 2015 23:27:43 +0000 (16:27 -0700)
The problem here is that there are some values that kernel accepts, but
does not set them, for example 18446744073709551615 which acts the same
way as zero.  Let's do the same thing we do with other tuning options
and re-read them right after they are set in order to keep our internal
structures up-to-date.

Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1165580

Signed-off-by: Martin Kletzander <mkletzan@redhat.com>
src/qemu/qemu_cgroup.c
src/qemu/qemu_driver.c

index e1a28272ee7b959914835595c6aed79b17394f8d..0da6c02386964d38a49361cafea8b7d6596142d8 100644 (file)
@@ -436,27 +436,37 @@ qemuSetupBlkioCgroup(virDomainObjPtr vm)
             virBlkioDevicePtr dev = &vm->def->blkio.devices[i];
             if (dev->weight &&
                 (virCgroupSetBlkioDeviceWeight(priv->cgroup, dev->path,
-                                               dev->weight) < 0))
+                                               dev->weight) < 0 ||
+                 virCgroupGetBlkioDeviceWeight(priv->cgroup, dev->path,
+                                               &dev->weight) < 0))
                 return -1;
 
             if (dev->riops &&
                 (virCgroupSetBlkioDeviceReadIops(priv->cgroup, dev->path,
-                                                 dev->riops) < 0))
+                                                 dev->riops) < 0 ||
+                 virCgroupGetBlkioDeviceReadIops(priv->cgroup, dev->path,
+                                                 &dev->riops) < 0))
                 return -1;
 
             if (dev->wiops &&
                 (virCgroupSetBlkioDeviceWriteIops(priv->cgroup, dev->path,
-                                                  dev->wiops) < 0))
+                                                  dev->wiops) < 0 ||
+                 virCgroupGetBlkioDeviceWriteIops(priv->cgroup, dev->path,
+                                                  &dev->wiops) < 0))
                 return -1;
 
             if (dev->rbps &&
                 (virCgroupSetBlkioDeviceReadBps(priv->cgroup, dev->path,
-                                                dev->rbps) < 0))
+                                                dev->rbps) < 0 ||
+                 virCgroupGetBlkioDeviceReadBps(priv->cgroup, dev->path,
+                                                &dev->rbps) < 0))
                 return -1;
 
             if (dev->wbps &&
                 (virCgroupSetBlkioDeviceWriteBps(priv->cgroup, dev->path,
-                                                 dev->wbps) < 0))
+                                                 dev->wbps) < 0 ||
+                 virCgroupGetBlkioDeviceWriteBps(priv->cgroup, dev->path,
+                                                 &dev->wbps) < 0))
                 return -1;
         }
     }
index 99a3817ff5ab96d1f6600a76fd56d881a741f045..b6ac075fe3d1a7566366b501a34546fd3787d7f4 100644 (file)
@@ -9206,7 +9206,10 @@ qemuDomainSetBlkioParameters(virDomainPtr dom,
                     for (j = 0; j < ndevices; j++) {
                         if (virCgroupSetBlkioDeviceWeight(priv->cgroup,
                                                           devices[j].path,
-                                                          devices[j].weight) < 0) {
+                                                          devices[j].weight) < 0 ||
+                            virCgroupGetBlkioDeviceWeight(priv->cgroup,
+                                                          devices[j].path,
+                                                          &devices[j].weight) < 0) {
                             ret = -1;
                             break;
                         }
@@ -9215,7 +9218,10 @@ qemuDomainSetBlkioParameters(virDomainPtr dom,
                     for (j = 0; j < ndevices; j++) {
                         if (virCgroupSetBlkioDeviceReadIops(priv->cgroup,
                                                             devices[j].path,
-                                                            devices[j].riops) < 0) {
+                                                            devices[j].riops) < 0 ||
+                            virCgroupGetBlkioDeviceReadIops(priv->cgroup,
+                                                            devices[j].path,
+                                                            &devices[j].riops) < 0) {
                             ret = -1;
                             break;
                         }
@@ -9224,7 +9230,10 @@ qemuDomainSetBlkioParameters(virDomainPtr dom,
                     for (j = 0; j < ndevices; j++) {
                         if (virCgroupSetBlkioDeviceWriteIops(priv->cgroup,
                                                              devices[j].path,
-                                                             devices[j].wiops) < 0) {
+                                                             devices[j].wiops) < 0 ||
+                            virCgroupGetBlkioDeviceWriteIops(priv->cgroup,
+                                                             devices[j].path,
+                                                             &devices[j].wiops) < 0) {
                             ret = -1;
                             break;
                         }
@@ -9233,7 +9242,10 @@ qemuDomainSetBlkioParameters(virDomainPtr dom,
                     for (j = 0; j < ndevices; j++) {
                         if (virCgroupSetBlkioDeviceReadBps(priv->cgroup,
                                                            devices[j].path,
-                                                           devices[j].rbps) < 0) {
+                                                           devices[j].rbps) < 0 ||
+                            virCgroupGetBlkioDeviceReadBps(priv->cgroup,
+                                                           devices[j].path,
+                                                           &devices[j].rbps) < 0) {
                             ret = -1;
                             break;
                         }
@@ -9242,7 +9254,10 @@ qemuDomainSetBlkioParameters(virDomainPtr dom,
                     for (j = 0; j < ndevices; j++) {
                         if (virCgroupSetBlkioDeviceWriteBps(priv->cgroup,
                                                             devices[j].path,
-                                                            devices[j].wbps) < 0) {
+                                                            devices[j].wbps) < 0 ||
+                            virCgroupGetBlkioDeviceWriteBps(priv->cgroup,
+                                                            devices[j].path,
+                                                            &devices[j].wbps) < 0) {
                             ret = -1;
                             break;
                         }