From 527f377a922bd26bd7c3a322c7d7d7e9b091f8b7 Mon Sep 17 00:00:00 2001 From: Cole Robinson Date: Sat, 5 Oct 2019 14:39:32 -0400 Subject: [PATCH] storagefile: Fill in meta->externalDataStore Add virStorageSourceNewFromExternalData, similar to virStorageSourceNewFromBacking and use it to fill in a virStorageSource for externalDataStore Reviewed-by: Daniel Henrique Barboza Reviewed-by: Michal Privoznik Signed-off-by: Cole Robinson --- src/util/virstoragefile.c | 35 +++++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) diff --git a/src/util/virstoragefile.c b/src/util/virstoragefile.c index 427510bd6a..497ade927e 100644 --- a/src/util/virstoragefile.c +++ b/src/util/virstoragefile.c @@ -3800,6 +3800,24 @@ virStorageSourceNewFromBacking(virStorageSourcePtr parent, } +static int +virStorageSourceNewFromExternalData(virStorageSourcePtr parent, + virStorageSourcePtr *externalDataStore) +{ + int rc; + + if ((rc = virStorageSourceNewFromChild(parent, + parent->externalDataStoreRaw, + externalDataStore)) < 0) + return rc; + + /* qcow2 data_file can only be raw */ + (*externalDataStore)->format = VIR_STORAGE_FILE_RAW; + (*externalDataStore)->readonly = parent->readonly; + return rc; +} + + /** * @src: disk source definition structure * @fd: file descriptor @@ -5008,6 +5026,23 @@ virStorageFileGetMetadataRecurse(virStorageSourcePtr src, } VIR_STEAL_PTR(src->backingStore, backingStore); + + if (src->externalDataStoreRaw) { + VIR_AUTOUNREF(virStorageSourcePtr) externalDataStore = NULL; + + if ((rv = virStorageSourceNewFromExternalData(src, + &externalDataStore)) < 0) + goto cleanup; + + if (rv == 1) { + /* the file would not be usable for VM usage */ + ret = 0; + goto cleanup; + } + + VIR_STEAL_PTR(src->externalDataStore, externalDataStore); + } + ret = 0; cleanup: