mirror of
https://github.com/qemu/qemu.git
synced 2025-10-25 11:17:27 +00:00
With virtio-blk dataplane, I/O errors might occur while QEMU is not in the main I/O thread. However, it's invalid to call vm_stop when we're neither in a VCPU thread nor in the main I/O thread, even if we were to take the iothread mutex around it. To avoid this problem, we can raise a request to the main I/O thread, similar to what QEMU does when vm_stop is called from a CPU thread. We know that bdrv_error_action is called from an AIO callback, and the moment at which the callback will fire is not well-defined; it depends on the moment at which the disk or OS finishes the operation, which can happen at any time. Note that QEMU is certainly not in a CPU thread and we do not need to call cpu_stop_current() like vm_stop() does. However, we need to ensure that any action taken by management will result in correct detection of the error _and_ a running VM. In particular: - the event must be raised after the iostatus has been set, so that "info block" will return an iostatus that matches the event. - the VM must be stopped after the iostatus has been set, so that "info block" will return an iostatus that matches the runstate. The ordering between the STOP and BLOCK_IO_ERROR events is preserved; BLOCK_IO_ERROR is documented to come first. This makes bdrv_error_action() thread safe (assuming QMP events are, which is attacked by a separate series). Signed-off-by: Paolo Bonzini <pbonzini@redhat.com> Reviewed-by: Eric Blake <eblake@redhat.com> Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com> |
||
|---|---|---|
| .. | ||
| qmp | ||
| specs | ||
| atomics.txt | ||
| blkverify.txt | ||
| bootindex.txt | ||
| ccid.txt | ||
| ich9-ehci-uhci.cfg | ||
| libcacard.txt | ||
| live-block-ops.txt | ||
| memory.txt | ||
| migration.txt | ||
| multiseat.txt | ||
| q35-chipset.cfg | ||
| qapi-code-gen.txt | ||
| qdev-device-use.txt | ||
| qemupciserial.inf | ||
| rdma.txt | ||
| spice-port-fqdn.txt | ||
| tracing.txt | ||
| usb2.txt | ||
| usb-storage.txt | ||
| virtio-balloon-stats.txt | ||
| vnc-ledstate-Pseudo-encoding.txt | ||
| writing-qmp-commands.txt | ||
| xbzrle.txt | ||
| xen-save-devices-state.txt | ||