From: Peter Krempa Date: Tue, 26 Nov 2024 09:23:23 +0000 (+0100) Subject: qemu: snapshot: Change 'data-file' to read-only after snapshot X-Git-Tag: v10.10.0-rc2~13 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=2a9349c8e8055de6c21d12df5ea9098c3a0514a7;p=thirdparty%2Flibvirt.git 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 Reviewed-by: Jiri Denemark --- diff --git a/src/qemu/qemu_snapshot.c b/src/qemu/qemu_snapshot.c index 5b3aadcbf0..18b2e478f6 100644 --- a/src/qemu/qemu_snapshot.c +++ b/src/qemu/qemu_snapshot.c @@ -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)