Bug 1131819
| Summary: | Libvirtd crash while set blkdeviotune with the hotplug disk and specify the --config option | ||||||
|---|---|---|---|---|---|---|---|
| Product: | Red Hat Enterprise Linux 7 | Reporter: | zhenfeng wang <zhwang> | ||||
| Component: | libvirt | Assignee: | Peter Krempa <pkrempa> | ||||
| Status: | CLOSED ERRATA | QA Contact: | Virtualization Bugs <virt-bugs> | ||||
| Severity: | high | Docs Contact: | |||||
| Priority: | unspecified | ||||||
| Version: | 7.1 | CC: | dyuan, lhuang, mzhan, pkrempa, rbalakri, vivianzhang, ydu | ||||
| Target Milestone: | rc | ||||||
| Target Release: | --- | ||||||
| Hardware: | x86_64 | ||||||
| OS: | Unspecified | ||||||
| Whiteboard: | |||||||
| Fixed In Version: | libvirt-1.2.8-1.el7 | Doc Type: | Bug Fix | ||||
| Doc Text: | Story Points: | --- | |||||
| Clone Of: | |||||||
| : | 1131821 (view as bug list) | Environment: | |||||
| Last Closed: | 2015-03-05 07:42:50 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: | |||||||
| Bug Depends On: | |||||||
| Bug Blocks: | 1131821 | ||||||
| Attachments: |
|
||||||
|
Description
zhenfeng wang
2014-08-20 06:36:55 UTC
Created attachment 928632 [details]
The libvirtd crash dump info
Fixed upstream:
commit 653137eb957a278b556c6226424aad5395a38a61
Author: Peter Krempa <pkrempa>
Date: Wed Aug 20 10:49:49 2014 +0200
qemu: blkiotune: Avoid accessing non-existing disk configuration
When a user would try changing the persistent IO tuning settings for a
disk that was hotplugged to a vm in a transient way, the
qemuDomainSetBlockIoTune API would use the same index for both the
live and config disk array. The disk was missing from the config array
though causing a crash of libvirtd.
To fix the issue, determine the indexes separately.
v1.2.7-180-g653137e
Verified with build libvirt-1.2.8-1.el7.x86_64, here are verify steps:
[root@rhel7-a1 ~]# qemu-img create /var/lib/libvirt/images/nfs/test.img 1G
Formatting '/var/lib/libvirt/images/nfs/test.img', fmt=raw size=1073741824
[root@rhel7-a1 ~]# virsh start rhel6
Domain rhel6 started
[root@rhel7-a1 ~]# virsh attach-disk rhel6 /var/lib/libvirt/images/nfs/test.img vdb
Disk attached successfully
[root@rhel7-a1 ~]# ps aux | grep libvirtd
root 1269 0.0 0.9 1075152 18440 ? Ssl 02:17 0:00 /usr/sbin/libvirtd
[root@rhel7-a1 ~]# virsh blkdeviotune rhel6 vdb --write-iops-sec 10 --config
error: Unable to change block I/O throttle
error: invalid argument: missing persistent configuration for disk 'vdb'
[root@rhel7-a1 ~]# virsh blkdeviotune rhel6 vdb --write-iops-sec 10
[root@rhel7-a1 ~]# virsh blkdeviotune rhel6 vdb
total_bytes_sec: 0
read_bytes_sec : 0
write_bytes_sec: 0
total_iops_sec : 0
read_iops_sec : 0
write_iops_sec : 10
[root@rhel7-a1 ~]# ps aux | grep libvirtd
root 1269 0.0 0.9 1075152 18516 ? Ssl 02:17 0:00 /usr/sbin/libvirtd
[root@rhel7-a1 ~]# systemctl status libvirtd.service
libvirtd.service - Virtualization daemon
Loaded: loaded (/usr/lib/systemd/system/libvirtd.service; enabled)
Active: active (running) since Wed 2014-09-10 02:17:51 EDT; 13min ago
Docs: man:libvirtd(8)
http://libvirt.org
Main PID: 1269 (libvirtd)
CGroup: /system.slice/libvirtd.service
├─1269 /usr/sbin/libvirtd
├─2421 /sbin/dnsmasq --conf-file=/var/lib/libvirt/dnsmasq/default...
└─2422 /sbin/dnsmasq --conf-file=/var/lib/libvirt/dnsmasq/default...
I can produce this bud on build libvirt-1.2.7-1.el7.x86_64
verify it on build
libvirt-1.2.8-9.el7.x86_64
qemu-kvm-rhev-2.1.2-14.el7.x86_64
3.10.0-208.el7.x86_64
verify steps
1. prepare a normal guest in running status
# virsh list --all
Id Name State
----------------------------------------------------
74 rhel7new running
2. create a img and attach it to guest success
# qemu-img create /var/lib/libvirt/images/test1.img 1G
Formatting '/var/lib/libvirt/images/test1.img', fmt=raw size=1073741824
# virsh attach-disk rhel7new /var/lib/libvirt/images/test1.img vdb
Disk attached successfully
# virsh domblklist rhel7new
Target Source
------------------------------------------------
hda /var/lib/libvirt/images/rhel7new.qcow2
vdb /var/lib/libvirt/images/test1.img
3. check libvirtd process id firstly
#ps aux |grep libvirtd
root 15315 1.2 0.2 1135052 20944 ? Ssl 11:01 0:06 /usr/sbin/libvirtd --listen
root 15829 0.0 0.0 112644 956 pts/4 S+ 11:09 0:00 grep --color=auto libvirtd
4. Set io parameters for the vdb and specify the --config option
# virsh blkdeviotune rhel7new vdb --config
error: Unable to get block I/O throttle parameters
error: invalid argument: disk 'vdb' was not found in the domain config
# virsh blkdeviotune rhel7new vdb --write-iops-sec 10 --config
error: Unable to change block I/O throttle
error: invalid argument: missing persistent configuration for disk 'vdb'
# virsh blkdeviotune rhel7new vdb --read-iops-sec 10 --config
error: Unable to change block I/O throttle
error: invalid argument: missing persistent configuration for disk 'vdb'
5. check libvirtd pid, do not crash
# ps aux |grep libvirtd
root 15315 0.7 0.2 1135052 20980 ? Ssl 11:01 0:06 /usr/sbin/libvirtd --listen
root 16072 0.0 0.0 112644 960 pts/4 S+ 11:14 0:00 grep --color=auto libvirtd
# service libvirtd status
Redirecting to /bin/systemctl status libvirtd.service
libvirtd.service - Virtualization daemon
Loaded: loaded (/usr/lib/systemd/system/libvirtd.service; enabled)
Active: active (running) since Mon 2014-12-01 11:01:47 HKT; 13min ago
Docs: man:libvirtd(8)
http://libvirt.org
Main PID: 15315 (libvirtd)
CGroup: /system.slice/libvirtd.service
├─ 4028 /sbin/dnsmasq --conf-file=/var/lib/libvirt/dnsmasq/default.conf --...
├─ 4029 /sbin/dnsmasq --conf-file=/var/lib/libvirt/dnsmasq/default.conf --...
├─11753 /usr/sbin/glusterfs --direct-io-mode=1 --volfile-server=10.66.106....
└─15315 /usr/sbin/libvirtd --listen
Dec 01 11:03:28 server.englab.nay.redhat.com libvirtd[15315]: 2014-12-01 03:03:28.783...
Dec 01 11:03:28 server.englab.nay.redhat.com libvirtd[15315]: 2014-12-01 03:03:28.783...
Dec 01 11:03:28 server.englab.nay.redhat.com libvirtd[15315]: 2014-12-01 03:03:28.783...
Dec 01 11:03:28 server.englab.nay.redhat.com libvirtd[15315]: 2014-12-01 03:03:28.783...
Dec 01 11:03:28 server.englab.nay.redhat.com libvirtd[15315]: 2014-12-01 03:03:28.783...
Dec 01 11:03:28 server.englab.nay.redhat.com libvirtd[15315]: 2014-12-01 03:03:28.783...
Dec 01 11:03:28 server.englab.nay.redhat.com libvirtd[15315]: 2014-12-01 03:03:28.783...
Dec 01 11:03:28 server.englab.nay.redhat.com libvirtd[15315]: 2014-12-01 03:03:28.783...
Dec 01 11:03:28 server.englab.nay.redhat.com libvirtd[15315]: 2014-12-01 03:03:28.783...
Dec 01 11:03:28 server.englab.nay.redhat.com libvirtd[15315]: 2014-12-01 03:03:28.783...
Hint: Some lines were ellipsized, use -l to show in full.
6. Set io parameters for the vdb and specify the --live/--current option
# virsh blkdeviotune rhel7new vdb --read-iops-sec 10 --current
# virsh blkdeviotune rhel7new vdb
total_bytes_sec: 0
read_bytes_sec : 0
write_bytes_sec: 0
total_iops_sec : 0
read_iops_sec : 10
write_iops_sec : 0
# virsh blkdeviotune rhel7new vdb --write-iops-sec 10 --live
[root@server ~]# virsh blkdeviotune rhel7new vdb
total_bytes_sec: 0
read_bytes_sec : 0
write_bytes_sec: 0
total_iops_sec : 0
read_iops_sec : 0
write_iops_sec : 10
[root@server ~]# virsh blkdeviotune rhel7new vdb --read-iops-sec 10 --live
[root@server ~]# virsh blkdeviotune rhel7new vdb
total_bytes_sec: 0
read_bytes_sec : 0
write_bytes_sec: 0
total_iops_sec : 0
read_iops_sec : 10
write_iops_sec : 0
# virsh blkdeviotune rhel7new vdb --read-iops-sec 10 --total-bytes-sec 10 --live
# virsh blkdeviotune rhel7new vdb
total_bytes_sec: 10
read_bytes_sec : 0
write_bytes_sec: 0
total_iops_sec : 0
read_iops_sec : 10
write_iops_sec : 0
7. destroy guest, and start guest again, login guest work well
and vdb disk dismiss, libvirtd do not crash
# virsh domblklist rhel7new
Target Source
------------------------------------------------
hda /var/lib/libvirt/images/rhel7new.qcow2
# ps aux |grep libvirtd
root 15315 0.4 0.2 1135196 21084 ? Ssl 11:01 0:06 /usr/sbin/libvirtd --listen
root 16579 0.0 0.0 112644 960 pts/4 S+ 11:25 0:00 grep --color=auto libvirtd
move to verified
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://rhn.redhat.com/errata/RHSA-2015-0323.html |