On 08.04.2015 08:35, Michael Chapman wrote: > 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. > Yes, I've already told Peter in person a week ago. > 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? > Sounds good to me. Michal -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list