[libvirt] [PATCH 2/3] qemu: event: Don't fiddle with disk backing trees without a job
Michael Chapman
mike at very.puzzling.org
Wed Apr 8 06:35:09 UTC 2015
On Fri, 13 Mar 2015, Peter Krempa wrote:
> Surprisingly we did not grab a VM job when a block job finished and we'd
> happily rewrite the backing chain data. This made it possible to crash
> libvirt when queueing two backing chains tightly and other badness.
>
> To fix it, add yet another handler to the helper thread that handles
> monitor events that require a job.
Hi Peter,
Unfortunately, I think this change has broken disk mirroring during
migration. When a disk mirror is ready (or aborted), processBlockJobEvent
blocks when beginning its MODIFY job because of the ongoing MIGRATION_OUT
async job.
I'd like to solve this by making use of blockJobSync from within
qemuMigrationDriveMirror. This is also going to fix another bug where
libvirt doesn't wait for QEMU to complete the drive mirroring before
migrating a VM (leading to disk corruption if there's ongoing writes!)
The plan would be to move qemuBlockJobEventProcess into a separate
qemu_blockjob.c, so it can be used from both qemu_driver and
qemu_migration, along with a few helper functions to set up blockJobSync
and to wait for it to be notified. Do you think this would be a suitable
approach?
- Michael
More information about the libvir-list
mailing list