This series adds support to the block layer to keep track of devices'
I/O status. That information is also made available in QMP and HMP.
The goal here is to allow management applications that miss the
BLOCK_IO_ERROR event to able to query the VM to determine if any device has
caused the VM to stop and which device caused it.
Here's an HMP example:
(qemu) info status
VM status: paused (io-error)
(qemu) info block
ide0-hd0: removable=0 io-status=ok file=disks/test2.img ro=0 drv=qcow2
encrypted=0
ide0-hd1: removable=0 io-status=nospace file=/dev/vg_doriath/kvmtest ro=0
drv=qcow2 encrypted=0
ide1-cd0: removable=1 locked=0 io-status=ok [not inserted]
floppy0: removable=1 locked=0 [not inserted]
sd0: removable=1 locked=0 [not inserted]
The session above shows that the VM is stopped due to an I/O error. By using
the info block command it's possible to determine that the 'ide0-hd1' device
caused the error, which turns out to be due to no space.
changelog
---------
v3
o Introduce bdrv_iostatus_disable()
o Also reset the I/O status on bdrv_attach_dev()
o Fix bad assert() in bdrv_iostatus_enable()
o Improve documentation
v2
o Rebase against latest master
o Renamed bdrv_iostatus_update() to bdrv_iostatus_set_err()
o Minor changelog clarifications
block.c | 57 +++++++++++++++++++++++++++++++++++++++++++++++++++++++
block.h | 10 +++++++++
block_int.h | 1 +
hw/ide/core.c | 2 +
hw/scsi-disk.c | 2 +
hw/virtio-blk.c | 2 +
monitor.c | 6 +++++
qmp-commands.hx | 6 +++++
8 files changed, 86 insertions(+), 0 deletions(-)