storage: Properly track that backing chain members are readonly

Everything besides the top of the chain is readonly. Track this when
parsing the XML and detecting the chain from the disk. Also fix the
state when taking snapshots.

All other cases where the top image is changed already preserve the
readonly state from the original image.

Signed-off-by: Peter Krempa <pkrempa@redhat.com>
Reviewed-by: John Ferlan <jferlan@redhat.com>
This commit is contained in:
Peter Krempa 2018-04-11 15:35:02 +02:00
parent 5dbdd401e8
commit 3817fa10c4
3 changed files with 7 additions and 0 deletions

View File

@ -8735,6 +8735,9 @@ virDomainDiskBackingStoreParse(xmlXPathContextPtr ctxt,
if (VIR_ALLOC(backingStore) < 0)
goto cleanup;
/* backing store is always read-only */
backingStore->readonly = true;
/* terminator does not have a type */
if (!(type = virXMLPropString(ctxt->node, "type"))) {
VIR_STEAL_PTR(src->backingStore, backingStore);

View File

@ -14680,6 +14680,9 @@ qemuDomainSnapshotUpdateDiskSources(qemuDomainSnapshotDiskDataPtr dd,
if (dd->initialized)
virStorageFileDeinit(dd->src);
/* the old disk image is now readonly */
dd->disk->src->readonly = true;
VIR_STEAL_PTR(dd->disk->src->relPath, dd->relPath);
VIR_STEAL_PTR(dd->src->backingStore, dd->disk->src);
VIR_STEAL_PTR(dd->disk->src, dd->src);

View File

@ -3425,6 +3425,7 @@ virStorageSourceNewFromBacking(virStorageSourcePtr parent)
if (virStorageSourceInitChainElement(ret, parent, true) < 0)
goto error;
ret->readonly = true;
ret->detected = true;
}