提交 bc82d1ea 编写于 作者: N Nikolay Shirokovskiy 提交者: Jiri Denemark

qemu: migration: fix race on cancelling drive mirror

0feebab2 adds calling qemuBlockNodeNamesDetect for completed job
on updating block jobs. This affects cancelling drive mirror logic as
this function drops vm lock. Now we have to recheck all disks
before the disk with the completed block job before going
to wait for block job events.
Signed-off-by: NJiri Denemark <jdenemar@redhat.com>
上级 dd8e4079
......@@ -655,9 +655,11 @@ qemuMigrationDriveMirrorCancelled(virQEMUDriverPtr driver,
{
size_t i;
size_t active = 0;
size_t completed = 0;
int status;
bool failed = false;
retry:
for (i = 0; i < vm->def->ndisks; i++) {
virDomainDiskDefPtr disk = vm->def->disks[i];
qemuDomainDiskPrivatePtr diskPriv = QEMU_DOMAIN_DISK_PRIVATE(disk);
......@@ -684,6 +686,19 @@ qemuMigrationDriveMirrorCancelled(virQEMUDriverPtr driver,
default:
active++;
}
if (status == VIR_DOMAIN_BLOCK_JOB_COMPLETED)
completed++;
}
/* Updating completed block job drops the lock thus we have to recheck
* block jobs for disks that reside before the disk(s) with completed
* block job.
*/
if (completed > 0) {
completed = 0;
active = 0;
goto retry;
}
if (failed) {
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册