[libvirt] [PATCH v6 05/13] virstoragefile: change backingStore to backingStores.

Peter Krempa pkrempa at redhat.com
Mon Nov 2 08:35:00 UTC 2015


On Thu, Oct 29, 2015 at 14:43:12 +0100, Matthias Gatto wrote:
> The backingStore field was a virStorageSourcePtr.
> Because a quorum can contain more that one backingStore at the same level,
> it's now an array of 'virStorageSourcePtr'.
> 
> This patch rename  src->backingStore to src->backingStores,
> Made the necessary changes to virStorageSourceSetBackingStore
> and virStorageSourceGetBackingStore.
> virStorageSourceSetBackingStore can now expand the size of src->backingStores.
> 
> Signed-off-by: Matthias Gatto <matthias.gatto at outscale.com>
> ---
>  src/storage/storage_backend.c    |  2 +-
>  src/storage/storage_backend_fs.c |  2 +-
>  src/util/virstoragefile.c        | 48 +++++++++++++++++++++++++++++++++-------
>  src/util/virstoragefile.h        |  3 ++-
>  4 files changed, 44 insertions(+), 11 deletions(-)

[...]

> 
> diff --git a/src/util/virstoragefile.c b/src/util/virstoragefile.c
> index cb96c5b..44bce91 100644
> --- a/src/util/virstoragefile.c
> +++ b/src/util/virstoragefile.c
> @@ -1809,21 +1809,48 @@ virStorageSourcePoolDefCopy(const virStorageSourcePoolDef *src)
>  }
>  
>  
> +/**
> + * virStorageSourceGetBackingStore:
> + * @src: virStorageSourcePtr containing the backing stores
> + * @pos: position of the backing store to get
> + *
> + * return the backingStore at the position of @pos
> + */
>  virStorageSourcePtr
> -virStorageSourceGetBackingStore(const virStorageSource *src,
> -                                size_t pos ATTRIBUTE_UNUSED)
> +virStorageSourceGetBackingStore(const virStorageSource *src, size_t pos)
>  {
> -    return src->backingStore;
> +    if (!src || !src->backingStores || pos >= src->nBackingStores)
> +        return NULL;

The first two condition statements should be in the patch that
introduced this function.

> +    return src->backingStores[pos];
>  }
>  
>  
> +/**
> + * virStorageSourceSetBackingStore:
> + * @src: virStorageSourcePtr to hold @backingStore
> + * @backingStore: backingStore to store
> + * @pos: position of the backing store to store
> + *
> + * Set @backingStore at @pos in src->backingStores.
> + * If src->backingStores don't have the space to contain
> + * @backingStore, we expand src->backingStores
> + */
>  bool

As I've said earlier, libvirt's convention is to return -1 in case when
something failed.

>  virStorageSourceSetBackingStore(virStorageSourcePtr src,
>                                  virStorageSourcePtr backingStore,
> -                                size_t pos ATTRIBUTE_UNUSED)
> +                                size_t pos)
>  {
> -    src->backingStore = backingStore;
> -    return !!src->backingStore;
> +    if (!src)
> +        return false;
> +
> +    if (pos >= src->nBackingStores) {
> +        int nbr = pos - src->nBackingStores + 1;
> +        if (VIR_EXPAND_N(src->backingStores, src->nBackingStores, nbr) < 0)
> +            return false;
> +    }
> +
> +    src->backingStores[pos] = backingStore;

Shouldn't this free the backing store if it's being overwritten? Or
perhaps fail if it's already assigned?

> +    return true;
>  }
>  
>  
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 819 bytes
Desc: Digital signature
URL: <http://listman.redhat.com/archives/libvir-list/attachments/20151102/3e29dd92/attachment-0001.sig>


More information about the libvir-list mailing list