qemu: snapshot: Change 'data-file' to read-only after snapshot

For the reason outlined in previous commit qemu doesn't do this
automatically. Handle it manually after the snapshot.

Signed-off-by: Peter Krempa <pkrempa@redhat.com>
Reviewed-by: Jiri Denemark <jdenemar@redhat.com>
This commit is contained in:
Peter Krempa 2024-11-26 10:23:23 +01:00
parent 754ca45c45
commit 2a9349c8e8

View File

@ -1434,12 +1434,14 @@ qemuSnapshotGetTransientDiskDef(virDomainDiskDef *domdisk,
* qemuSnapshotDiskUpdateSource:
* @vm: domain object
* @dd: snapshot disk data object
* @asyncJob: async job type
*
* Updates disk definition after a successful snapshot.
*/
static void
qemuSnapshotDiskUpdateSource(virDomainObj *vm,
qemuSnapshotDiskData *dd)
qemuSnapshotDiskData *dd,
virDomainAsyncJob asyncJob)
{
qemuDomainObjPrivate *priv = vm->privateData;
virQEMUDriver *driver = priv->driver;
@ -1451,6 +1453,11 @@ qemuSnapshotDiskUpdateSource(virDomainObj *vm,
if (qemuSecurityMoveImageMetadata(driver, vm, dd->disk->src, dd->src) < 0)
VIR_WARN("Unable to move disk metadata on vm %s", vm->def->name);
/* if the original image has a data-file turn it read-only */
if (dd->disk->src->dataFileStore) {
ignore_value(qemuBlockReopenReadOnly(vm, dd->disk->src->dataFileStore, asyncJob));
}
/* unlock the write lock on the original image as qemu will no longer write to it */
virDomainLockImageDetach(driver->lockManager, vm, dd->disk->src);
@ -1498,7 +1505,7 @@ qemuSnapshotDiskCreate(qemuSnapshotDiskContext *snapctxt)
virDomainAuditDisk(snapctxt->vm, dd->disk->src, dd->src, "snapshot", rc >= 0);
if (rc == 0)
qemuSnapshotDiskUpdateSource(snapctxt->vm, dd);
qemuSnapshotDiskUpdateSource(snapctxt->vm, dd, snapctxt->asyncJob);
}
if (rc < 0)