mirror of https://gitee.com/openkylin/libvirt.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 <hahn@univention.de>
This commit is contained in:
parent
e124f49890
commit
e0c469e58b
|
@ -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);
|
||||
|
|
Loading…
Reference in New Issue