mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2024-12-24 14:45:24 +00:00
qemuDomainBlockPivot: Handle merging of bitmaps when pivoting an active block-commit
Active layer block commit makes the 'base' image the new top image of the disk after it finishes. This means that all bitmap operations need to be handled prior to this happening as we'd lose writes otherwise. The ideal place is to handle it when pivoting to the new image as only guest-writes would be happening after this point. Use qemuBlockBitmapsHandleCommitFinish to calculate the merging transaction. Signed-off-by: Peter Krempa <pkrempa@redhat.com> Reviewed-by: Eric Blake <eblake@redhat.com>
This commit is contained in:
parent
2b9091f089
commit
8502b4b059
@ -17301,6 +17301,23 @@ qemuDomainBlockPivot(virQEMUDriverPtr driver,
|
||||
break;
|
||||
|
||||
case QEMU_BLOCKJOB_TYPE_ACTIVE_COMMIT:
|
||||
/* we technically don't need reopen here, but we couldn't prepare
|
||||
* the bitmaps if it wasn't present thus must skip this */
|
||||
if (blockdev &&
|
||||
virQEMUCapsGet(priv->qemuCaps, QEMU_CAPS_BLOCKDEV_REOPEN)) {
|
||||
g_autoptr(virHashTable) blockNamedNodeData = NULL;
|
||||
|
||||
if (!(blockNamedNodeData = qemuBlockGetNamedNodeData(vm, QEMU_ASYNC_JOB_NONE)))
|
||||
return -1;
|
||||
|
||||
if (qemuBlockBitmapsHandleCommitFinish(job->data.commit.top,
|
||||
job->data.commit.base,
|
||||
blockNamedNodeData,
|
||||
&actions,
|
||||
job->data.commit.disabledBitmapsBase) < 0)
|
||||
return -1;
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user