[libvirt] [PATCH 05/18] util: storage: Move checking of the actual backing image to the worker

Eric Blake eblake at redhat.com
Tue Apr 22 21:03:32 UTC 2014


On 04/20/2014 04:13 PM, Peter Krempa wrote:
> Move the code checking the presence of the backing file to the recursive
> worker function instead of the metadata parser. The recursive worker
> will later be changed to parse more than just local files and this
> change will help the separation.
> ---
>  src/util/virstoragefile.c | 63 ++++++++++++++++++++---------------------------
>  1 file changed, 27 insertions(+), 36 deletions(-)
> 
> diff --git a/src/util/virstoragefile.c b/src/util/virstoragefile.c
> index 513f15d..a005e00 100644
> --- a/src/util/virstoragefile.c
> +++ b/src/util/virstoragefile.c
> @@ -795,7 +795,7 @@ qcow2GetFeatures(virBitmapPtr *features,
>   * information about the file and its backing store.  */
>  static int ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2)
>  ATTRIBUTE_NONNULL(3) ATTRIBUTE_NONNULL(4) ATTRIBUTE_NONNULL(7)
> -ATTRIBUTE_NONNULL(8) ATTRIBUTE_NONNULL(9)
> +ATTRIBUTE_NONNULL(8)

This hunk belongs in 4/18.


> @@ -1192,7 +1164,26 @@ virStorageFileGetMetadataRecurse(const char *path, const char *canonPath,
>          ret = 0;
>      }
> 
> -    if (ret == 0 && meta->backingStore) {
> +    if (ret == 0 && meta->backingStoreRaw) {
> +        if (virStorageIsFile(meta->backingStoreRaw)) {
> +            if (virFindBackingFile(directory,
> +                                   meta->backingStoreRaw,
> +                                   &backingDirectory,
> +                                   &meta->backingStore) < 0) {
> +                /* the backing file is (currently) unavailable, treat this
> +                 * file as standalone:
> +                 * backingStoreRaw is kept to mark broken image chains */
> +                VIR_WARN("Backing file '%s' of image '%s' is missing.",
> +                         meta->backingStoreRaw, path);
> +
> +                return 0;
> +            }
> +        } else {
> +            if (VIR_STRDUP(meta->backingStore, meta->backingStoreRaw) < 0)
> +                return -1;
> +        }
> +
> +
>          virStorageFileMetadataPtr backing;

This puts a declaration after statement; if you want, you could squash
this in.  Either way, ACK.

diff --git i/src/util/virstoragefile.c w/src/util/virstoragefile.c
index 6f0fb79..82b5c65 100644
--- i/src/util/virstoragefile.c
+++ w/src/util/virstoragefile.c
@@ -1168,6 +1168,8 @@ virStorageFileGetMetadataRecurse(const char *path,
const char *canonPath,
     }

     if (ret == 0 && meta->backingStoreRaw) {
+        virStorageFileMetadataPtr backing;
+
         if (virStorageIsFile(meta->backingStoreRaw)) {
             if (virFindBackingFile(directory,
                                    meta->backingStoreRaw,
@@ -1186,9 +1188,6 @@ virStorageFileGetMetadataRecurse(const char *path,
const char *canonPath,
                 return -1;
         }

-
-        virStorageFileMetadataPtr backing;
-
         if (backingFormat == VIR_STORAGE_FILE_AUTO && !allow_probe)
             backingFormat = VIR_STORAGE_FILE_RAW;
         else if (backingFormat == VIR_STORAGE_FILE_AUTO_SAFE)


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

-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 604 bytes
Desc: OpenPGP digital signature
URL: <http://listman.redhat.com/archives/libvir-list/attachments/20140422/7fc9f9f2/attachment-0001.sig>


More information about the libvir-list mailing list