From: Alex Jia <Alex Jia [email protected]>

The default flags are inconsistent on both qemuSetSchedulerParameters()
and qemuGetSchedulerParameters() in libvirt, the qemuGetSchedulerParameters()
always passes 'VIR_DOMAIN_AFFECT_CURRENT' flag to the 
qemuGetSchedulerParametersFlags(),
it should be a expected behavior, but the qemuSetSchedulerParameters() always 
passes
'VIR_DOMAIN_AFFECT_LIVE' flag to the qemuSetSchedulerParametersFlags(), if 
users use
default flag=0 or explicitly give a 'VIR_DOMAIN_AFFECT_CURRENT' flag to the
set_scheduler_parameters() in perl-Sys-Virt, because the flag value is 0, the 
result is
the virDomainSetSchedulerParameters() is called incorrectly.

In fact, it's enough to call the qemuSetSchedulerParametersFlags() regardless 
of what flag is
like 'virsh schedinfo' command.

How to reproduce?

# cat test.pl

#!/usr/bin/env perl
use warnings;
use strict;
use Sys::Virt;

my $uri = "qemu:///system";
my $domname = "foo";              # change your guest name
my $con = Sys::Virt->new(address => $uri, readonly => 0);
my $dom = $con->get_domain_by_name($domname);
my %sched_param = (Sys::Virt::Domain::SCHEDULER_CPU_SHARES=>1);
$dom->set_scheduler_parameters(\%sched_param, 
Sys::Virt::Domain::AFFECT_CURRENT);

# perl test.pl
libvirt error code: 55, message: Requested operation is not valid: domain is 
not running

Signed-off-by: Alex Jia <Alex Jia [email protected]>
---
 Virt.xs |   10 +++-------
 1 files changed, 3 insertions(+), 7 deletions(-)

diff --git a/Virt.xs b/Virt.xs
index 2b8d74c..fa58cc6 100644
--- a/Virt.xs
+++ b/Virt.xs
@@ -2833,13 +2833,9 @@ set_scheduler_parameters(dom, newparams, flags=0)
           }
       }
       vir_typed_param_from_hv(newparams, params, nparams);
-      if (flags) {
-          if (virDomainSetSchedulerParametersFlags(dom, params, nparams, 
flags) < 0)
-              _croak_error();
-      } else {
-          if (virDomainSetSchedulerParameters(dom, params, nparams) < 0)
-              _croak_error();
-      }
+
+      if (virDomainSetSchedulerParametersFlags(dom, params, nparams, flags) < 
0)
+          _croak_error();
       Safefree(params);
 
 
-- 
1.7.1

--
libvir-list mailing list
[email protected]
https://www.redhat.com/mailman/listinfo/libvir-list

Reply via email to