From dc2943579ff6ba167206b43667b32ecc419da0ac Mon Sep 17 00:00:00 2001 From: Peter Krempa Date: Tue, 15 Jul 2014 14:33:23 +0200 Subject: [PATCH] storage: fs: Properly parse backing store info Use the backing store parser to properly create the information about a volume's backing store. Unfortunately as the storage driver isn't prepared to allow volumes backed by networked filesystems add a workaround that will avoid changing the XML output. --- src/storage/storage_backend_fs.c | 22 +++++++++++++++++----- 1 file changed, 17 insertions(+), 5 deletions(-) diff --git a/src/storage/storage_backend_fs.c b/src/storage/storage_backend_fs.c index ed4917deaa..32471a76aa 100644 --- a/src/storage/storage_backend_fs.c +++ b/src/storage/storage_backend_fs.c @@ -96,16 +96,28 @@ virStorageBackendProbeTarget(virStorageSourcePtr target, goto cleanup; if (meta->backingStoreRaw) { - if (VIR_ALLOC(target->backingStore) < 0) + if (!(target->backingStore = virStorageSourceNewFromBacking(meta))) goto cleanup; - target->backingStore->path = meta->backingStoreRaw; - meta->backingStoreRaw = NULL; target->backingStore->format = backingStoreFormat; + /* XXX: Remote storage doesn't play nicely with volumes backed by + * remote storage. To avoid trouble, just fake the backing store is RAW + * and put the string from the metadata as the path of the target. */ + if (!virStorageSourceIsLocalStorage(target->backingStore)) { + virStorageSourceFree(target->backingStore); + + if (VIR_ALLOC(target->backingStore) < 0) + goto cleanup; + + target->backingStore->type = VIR_STORAGE_TYPE_NETWORK; + target->backingStore->path = meta->backingStoreRaw; + meta->backingStoreRaw = NULL; + target->backingStore->format = VIR_STORAGE_FILE_RAW; + } + if (target->backingStore->format == VIR_STORAGE_FILE_AUTO) { - if (!virStorageIsFile(target->backingStore->path) || - (rc = virStorageFileProbeFormat(target->backingStore->path, + if ((rc = virStorageFileProbeFormat(target->backingStore->path, -1, -1)) < 0) { /* If the backing file is currently unavailable or is * accessed via remote protocol only log an error, fake the -- GitLab