From: Philipp Hahn Date: Wed, 7 Nov 2012 13:53:49 +0000 (+0100) Subject: storage: fix broken backing chain X-Git-Url: http://xenbits.xensource.com/gitweb?a=commitdiff_plain;h=e0c469e58b93f852a72265919703cb6abd3779f8;p=people%2Fdariof%2Flibvirt.git storage: fix broken backing chain 82507838 refactored the code to keep both the raw and canonicalized form of the backingStore, which breaks badly when the storage pool contains a storage volume, which is missing its backing store file: # ./daemon/libvirtd -l 2012-11-07 12:43:33.279+0000: 22175: info : libvirt version: 1.0.0 2012-11-07 12:43:33.279+0000: 22175: error : absolutePathFromBaseFile:542 : Can't canonicalize path '/var/lib/libvirt/images/base.qcow2': No such file or directory 2012-11-07 12:43:33.280+0000: 22175: error : storageDriverAutostart:115 : Failed to autostart storage pool 'default': Can't canonicalize path '/var/lib/libvirt/images/base.qcow2': No such file or directory This is because virStorageFileGetMetadataFromBuf() aborts with -1 if the filename of the backingStore can not be canonicalized: #0 absolutePathFromBaseFile () at util/storage_file.c:541 #1 virStorageFileGetMetadataFromBuf () at util/storage_file.c:728 #2 virStorageFileGetMetadataFromFD () at util/storage_file.c:932 #3 virStorageBackendProbeTarget () at storage/storage_backend_fs.c:94 #4 virStorageBackendFileSystemRefresh () at storage/storage_backend_fs.c:849 #5 storagePoolStart () at storage/storage_driver.c:700 #6 virStoragePoolCreate () at libvirt.c:12471 ... Treat files which miss their backing file as standalone files. Signed-off-by: Philipp Hahn --- diff --git a/src/util/storage_file.c b/src/util/storage_file.c index e9771d7df..224921277 100644 --- a/src/util/storage_file.c +++ b/src/util/storage_file.c @@ -727,8 +727,9 @@ virStorageFileGetMetadataFromBuf(int format, meta->backingStoreRaw = meta->backingStore; meta->backingStore = absolutePathFromBaseFile(path, backing); if (meta->backingStore == NULL) { - VIR_FREE(backing); - return -1; + /* the backing file is (currently) unavailable, treat this + * file as standalone */ + backingFormat = VIR_STORAGE_FILE_NONE; } } VIR_FREE(backing);