Re: [PATCH] storage: fix broken backing chain

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On 11/07/2012 06:53 AM, Philipp Hahn wrote:
> 82507838 refactured the code to keep both the raw and canonicalized form

s/refactured/refactored/

> 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.

Makes sense; I don't know of anything better that we can do.

ACK and pushed.

> 
> Signed-off-by: Philipp Hahn <hahn@xxxxxxxxxxxxx>
> ---
>  src/util/storage_file.c |    5 +++--
>  1 files changed, 3 insertions(+), 2 deletions(-)
> 
> diff --git a/src/util/storage_file.c b/src/util/storage_file.c
> index e9771d7..2249212 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);
> 

-- 
Eric Blake   eblake@xxxxxxxxxx    +1-919-301-3266
Libvirt virtualization library http://libvirt.org

Attachment: signature.asc
Description: OpenPGP digital signature

--
libvir-list mailing list
libvir-list@xxxxxxxxxx
https://www.redhat.com/mailman/listinfo/libvir-list

[Index of Archives]     [Virt Tools]     [Libvirt Users]     [Lib OS Info]     [Fedora Users]     [Fedora Desktop]     [Fedora SELinux]     [Big List of Linux Books]     [Yosemite News]     [KDE Users]     [Fedora Tools]