Bug 1455510

Summary: libvirtd crashed when set blkdeviotune groupname together with some other parameters
Product: Red Hat Enterprise Linux 7 Reporter: Fangge Jin <fjin>
Component: libvirtAssignee: Peter Krempa <pkrempa>
Status: CLOSED ERRATA QA Contact: jiyan <jiyan>
Severity: high Docs Contact:
Priority: high    
Version: 7.4CC: dyuan, dzheng, lmen, pkrempa, pzhang, rbalakri, xuzhang, yanqzhan, yisun, zpeng
Target Milestone: rc   
Target Release: ---   
Hardware: x86_64   
OS: Linux   
Whiteboard:
Fixed In Version: libvirt-3.2.0-7.el7 Doc Type: If docs needed, set a value
Doc Text:
Story Points: ---
Clone Of: Environment:
Last Closed: 2017-08-02 01:34:35 UTC Type: Bug
Regression: --- Mount Type: ---
Documentation: --- CRM:
Verified Versions: Category: ---
oVirt Team: --- RHEL 7.3 requirements from Atomic Host:
Cloudforms Team: --- Target Upstream Version:
Embargoed:
Attachments:
Description Flags
libvirtd backtrace none

Description Fangge Jin 2017-05-25 11:48:51 UTC
Created attachment 1282230 [details]
libvirtd backtrace

Description of problem:
libvirtd crashed when set blkdeviotune groupname together with some other parameters

Version-Release number of selected component (if applicable):
libvirt-3.2.0-6.virtcov.el7.x86_64

How reproducible:
100%

Steps to Reproduce:
1.# virsh blkdeviotune vm2 vda --group-name ffff --total-bytes-sec 2000 
error: Disconnected from qemu:///system due to I/O error
error: Unable to change block I/O throttle
error: End of file while reading data: Input/output error

Actual results:
libvirtd crash

Expected results:
No crash

Additional info:
When set the parameters separately, it works well:
# virsh blkdeviotune vm2 vda --group-name ffff 

# virsh blkdeviotune vm2 vda --total-bytes-sec 2000 

# virsh blkdeviotune vm2 vda 
total_bytes_sec: 2000
read_bytes_sec : 0
write_bytes_sec: 0
total_iops_sec : 0
read_iops_sec  : 0
write_iops_sec : 0
total_bytes_sec_max: 0
read_bytes_sec_max: 0
write_bytes_sec_max: 0
total_iops_sec_max: 0
read_iops_sec_max: 0
write_iops_sec_max: 0
size_iops_sec  : 0
group_name     : ffff
total_bytes_sec_max_length: 0
read_bytes_sec_max_length: 0
write_bytes_sec_max_length: 0
total_iops_sec_max_length: 0
read_iops_sec_max_length: 0
write_iops_sec_max_length: 0

Comment 1 Peter Krempa 2017-05-25 12:26:21 UTC
Fixed upstream:

commit 0d3aff58e7ed190c97b40ee92f58cb0180cef6fe
Author: Peter Krempa <pkrempa>
Date:   Thu May 25 13:09:36 2017 +0200

    qemu: Use correct variable in qemuDomainSetBlockIoTune
    
    'param' contains the correct element from 'params'.
    
    If the group name would not be the first parameter libvirtd would crash.
    
    Introduced in c53bd25b13.

Comment 4 jiyan 2017-06-02 10:36:00 UTC
Version-Release number of selected component:
libvirt-3.2.0-7.el7.x86_64
qemu-kvm-rhev-2.9.0-7.el7.x86_64
Kernel-3.10.0-675.el7.x86_64

Steps to verify:
Note: refer to the bug https://bugzilla.redhat.com/show_bug.cgi?id=1433180
1.set the 'group-name' alone and confirm it will not work
# virsh blkdeviotune cow vda --group-name group1;virsh blkdeviotune cow vda
total_bytes_sec: 0
read_bytes_sec : 0
write_bytes_sec: 0
total_iops_sec : 0
read_iops_sec  : 0
write_iops_sec : 0
total_bytes_sec_max: 0
read_bytes_sec_max: 0
write_bytes_sec_max: 0
total_iops_sec_max: 0
read_iops_sec_max: 0
write_iops_sec_max: 0
size_iops_sec  : 0
group_name     : 
total_bytes_sec_max_length: 0
read_bytes_sec_max_length: 0
write_bytes_sec_max_length: 0
total_iops_sec_max_length: 0
read_iops_sec_max_length: 0
write_iops_sec_max_length: 0


2.set the 'total-bytes-sec' alone and confirm the value of'group-name' will be filled automatically
# virsh blkdeviotune cow vda --total-bytes-sec 2000; virsh blkdeviotune cow vda
total_bytes_sec: 2000
read_bytes_sec : 0
write_bytes_sec: 0
total_iops_sec : 0
read_iops_sec  : 0
write_iops_sec : 0
total_bytes_sec_max: 200
read_bytes_sec_max: 0
write_bytes_sec_max: 0
total_iops_sec_max: 0
read_iops_sec_max: 0
write_iops_sec_max: 0
size_iops_sec  : 0
group_name     : drive-virtio-disk0
total_bytes_sec_max_length: 1
read_bytes_sec_max_length: 0
write_bytes_sec_max_length: 0
total_iops_sec_max_length: 0
read_iops_sec_max_length: 0
write_iops_sec_max_length: 0

3.set the value of 'total-bytes-sec' as 0 and confirm value of 'group-name' will disappears
# virsh blkdeviotune cow vda --total-bytes-sec 0; virsh blkdeviotune cow vda
total_bytes_sec: 0
read_bytes_sec : 0
write_bytes_sec: 0
total_iops_sec : 0
read_iops_sec  : 0
write_iops_sec : 0
total_bytes_sec_max: 0
read_bytes_sec_max: 0
write_bytes_sec_max: 0
total_iops_sec_max: 0
read_iops_sec_max: 0
write_iops_sec_max: 0
size_iops_sec  : 0
group_name     : 
total_bytes_sec_max_length: 0
read_bytes_sec_max_length: 0
write_bytes_sec_max_length: 0
total_iops_sec_max_length: 0
read_iops_sec_max_length: 0
write_iops_sec_max_length: 0


4.set 'group-name' with 'total-bytes-sec',confirm the libvirtd will not crash and setting works
# virsh blkdeviotune cow vda --group-name group1 --total-bytes-sec 2000;virsh blkdeviotune cow vda
total_bytes_sec: 2000
read_bytes_sec : 0
write_bytes_sec: 0
total_iops_sec : 0
read_iops_sec  : 0
write_iops_sec : 0
total_bytes_sec_max: 200
read_bytes_sec_max: 0
write_bytes_sec_max: 0
total_iops_sec_max: 0
read_iops_sec_max: 0
write_iops_sec_max: 0
size_iops_sec  : 0
group_name     : group1
total_bytes_sec_max_length: 1
read_bytes_sec_max_length: 0
write_bytes_sec_max_length: 0
total_iops_sec_max_length: 0
read_iops_sec_max_length: 0
write_iops_sec_max_length: 0

# virsh blkdeviotune cow vda --group-name group1 --total-bytes-sec 0; virsh blkdeviotune cow vda
total_bytes_sec: 0
read_bytes_sec : 0
write_bytes_sec: 0
total_iops_sec : 0
read_iops_sec  : 0
write_iops_sec : 0
total_bytes_sec_max: 0
read_bytes_sec_max: 0
write_bytes_sec_max: 0
total_iops_sec_max: 0
read_iops_sec_max: 0
write_iops_sec_max: 0
size_iops_sec  : 0
group_name     : 
total_bytes_sec_max_length: 0
read_bytes_sec_max_length: 0
write_bytes_sec_max_length: 0
total_iops_sec_max_length: 0
read_iops_sec_max_length: 0
write_iops_sec_max_length: 0

# virsh blkdeviotune cow vda --total-bytes-sec 2000 --group-name group1;virsh blkdeviotune cow vda
total_bytes_sec: 2000
read_bytes_sec : 0
write_bytes_sec: 0
total_iops_sec : 0
read_iops_sec  : 0
write_iops_sec : 0
total_bytes_sec_max: 200
read_bytes_sec_max: 0
write_bytes_sec_max: 0
total_iops_sec_max: 0
read_iops_sec_max: 0
write_iops_sec_max: 0
size_iops_sec  : 0
group_name     : group1
total_bytes_sec_max_length: 1
read_bytes_sec_max_length: 0
write_bytes_sec_max_length: 0
total_iops_sec_max_length: 0
read_iops_sec_max_length: 0
write_iops_sec_max_length: 0

Comment 5 errata-xmlrpc 2017-08-02 01:34:35 UTC
Since the problem described in this bug report should be
resolved in a recent advisory, it has been closed with a
resolution of ERRATA.

For information on the advisory, and where to find the updated
files, follow the link below.

If the solution does not work for you, open a new bug report.

https://access.redhat.com/errata/RHEA-2017:1846