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

--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list

Reply via email to