Bug 738487 - Fix termination by signal with -no-shutdown
Summary: Fix termination by signal with -no-shutdown
Keywords:
Status: CLOSED ERRATA
Alias: None
Product: Red Hat Enterprise Linux 6
Classification: Red Hat
Component: qemu-kvm
Version: 6.2
Hardware: Unspecified
OS: Unspecified
urgent
urgent
Target Milestone: rc
: ---
Assignee: Kevin Wolf
QA Contact: Virtualization Bugs
URL:
Whiteboard:
Depends On:
Blocks: 734773 743047
TreeView+ depends on / blocked
 
Reported: 2011-09-14 23:40 UTC by Dave Allan
Modified: 2016-04-26 16:35 UTC (History)
11 users (show)

Fixed In Version: qemu-kvm-0.12.1.2-2.192.el6
Doc Type: Bug Fix
Doc Text:
Cause: When shutting down due to qemu-kvm SIGTERM request, qemu-kvm didn't terminated if -no-shutdown was used. Consequence: SIGTERM couldn't be used to terminate qemu-kvm properly, forcing libvirt to use SIGKILL (see libvirt bug 734773) and potential disk corruption. Change: The SIGTERM handler was changed so qemu-kvm terminates properly after shutdown even if -no-shutdown was used. Result: SIGTERM can now be used to terminate qemu-kvm even if -no-shutdown is used, and libvirt doesn't need to use SIGKILL anymore (libvirt bug 734773).
Clone Of:
Environment:
Last Closed: 2011-12-06 16:03:22 UTC


Attachments (Terms of Use)


Links
System ID Priority Status Summary Last Updated
Red Hat Product Errata RHSA-2011:1531 normal SHIPPED_LIVE Moderate: qemu-kvm security, bug fix, and enhancement update 2011-12-06 01:23:30 UTC
Red Hat Bugzilla 738241 None CLOSED Qemu sends two SHUTDOWN events when shutting down with -no-shutdown option 2019-05-14 08:47:09 UTC

Internal Links: 738241

Description Dave Allan 2011-09-14 23:40:29 UTC
Multiple customers have requested qemu support for graceful reboot using the libvirt API, functionality which works under Xen.  Libvirt implemented graceful reboot using the no-shutdown qemu option, but the result is data corruption under certain circumstances, and we are reverting the libvirt changes pending resolution of this BZ.  From our perspective, it doesn't really matter whether the solution is to implement a graceful reboot monitor command or to fix no-shutdown, although since we've implemented based on no-shutdown and IIUC graceful reboot was rejected by qemu upstream, I'd somewhat prefer fixing no-shutdown.

Comment 3 Dor Laor 2011-09-15 13:58:01 UTC
*** Bug 738273 has been marked as a duplicate of this bug. ***

Comment 5 Chao Yang 2011-09-21 09:47:28 UTC
Reproduced this issue with following steps on qemu-kvm-0.12.1.2-2.190.el6.x86_64
Steps:
1. boot a VM with -no-shutdown
2. send SIGTERM signal by 'kill -15 `pidof qemu-kvm`' during booting
3. issue 'cont', click on shutdown button after VM boot up
4. issue 'system_reset' then 'cont' in monior
5. click on shutdown button after VM boot up
6. send SIGTERM signal by 'kill -15 `pidof qemu-kvm`'

Actual Result:
after step 2, VM stopped,
(qemu) info status
VM status: paused
after step 3, VM stopped,
(qemu) info status
VM status: paused
after step 5, VM stopped,
-----> step 3,5 have reproduced bz728464
(qemu) info status 
after step 6, VM still stopped.
-----> step 2, 6 has reproduced this issue

Verified with same steps mentioned above on qemu-kvm-0.12.1.2-2.192.el6.x86_64, need re-launch a VM after step 2

Actual Result:
after step 2, VM quitted, ps -axu | grep qemu couldn't output qemu-kvm process
after step 3, VM stopped,
(qemu) handle_dev_input: stop
(qemu) info status
VM status: paused
after step 5, VM stopped
-----> this proved that this fix wouldn't cause problem like bz728464
after step 6, VM quitted, ps -axu | grep qemu couldn't output qemu-kvm process


CLI:
# /usr/libexec/qemu-kvm -M rhel6.2.0 -enable-kvm -m 4096 -smp 4,sockets=1,cores=4,threads=1 -name RHEL6.1_64 -uuid `uuidgen` -rtc base=utc,clock=host,driftfix=slew -boot menu=on -drive file=/home/rhel6.1.z-x86_64.qcow2,if=none,id=drive-virtio-0-0,media=disk,format=qcow2,cache=none,werror=stop,rerror=stop -device virtio-blk-pci,drive=drive-virtio-0-0,id=virt0-0-0,bootindex=1 -netdev tap,id=hostnet1,vhost=on -device virtio-net-pci,netdev=hostnet1,id=net1,mac=64:31:50:41:e1:c3 -usb -device usb-tablet,id=input1,bus=usb.0,port=1  -spice port=7000,disable-ticketing -vga qxl -global qxl-vga.vram_size=67108864 -monitor stdio -balloon none -no-shutdown
                                                                    ^^^^^^^^^^^^


-----Conclusion:
Based on above, I think  this issue has been fixed correctly.

Comment 8 Eduardo Habkost 2011-11-22 13:33:43 UTC
    Technical note added. If any revisions are required, please edit the "Technical Notes" field
    accordingly. All revisions will be proofread by the Engineering Content Services team.
    
    New Contents:
Cause: When shutting down due to qemu-kvm SIGTERM request, qemu-kvm didn't terminated if -no-shutdown was used.

Consequence: SIGTERM couldn't be used to terminate qemu-kvm properly, forcing libvirt to use SIGKILL (see libvirt bug 734773) and potential disk corruption.

Change: The SIGTERM handler was changed so qemu-kvm terminates properly after shutdown even if -no-shutdown was used.

Result: SIGTERM can now be used to terminate qemu-kvm even if -no-shutdown is used, and libvirt doesn't need to use SIGKILL anymore (libvirt bug 734773).

Comment 9 errata-xmlrpc 2011-12-06 16:03:22 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.

http://rhn.redhat.com/errata/RHSA-2011-1531.html


Note You need to log in before you can comment on or make changes to this bug.