[libvirt] [PATCH 17/30] storagefile: Split out virStorageSourceNewFromChild
Daniel Henrique Barboza
danielhb413 at gmail.com
Thu Oct 10 14:40:01 UTC 2019
On 10/7/19 6:49 PM, Cole Robinson wrote:
> Future patches will use this for external data file handling
>
> Signed-off-by: Cole Robinson <crobinso at redhat.com>
> ---
Reviewed-by: Daniel Henrique Barboza <danielhb413 at gmail.com>
> src/util/virstoragefile.c | 47 ++++++++++++++++++++++++++-------------
> 1 file changed, 31 insertions(+), 16 deletions(-)
>
> diff --git a/src/util/virstoragefile.c b/src/util/virstoragefile.c
> index c47df6c200..7ae6719dd6 100644
> --- a/src/util/virstoragefile.c
> +++ b/src/util/virstoragefile.c
> @@ -3716,38 +3716,38 @@ virStorageSourceNewFromBackingAbsolute(const char *path,
>
>
> /**
> - * virStorageSourceNewFromBacking:
> + * virStorageSourceNewFromChild:
> * @parent: storage source parent
> - * @backing: returned backing store definition
> + * @child: returned child/backing store definition
> + * @parentRaw: raw child string (backingStoreRaw)
> *
> * Creates a storage source which describes the backing image of @parent and
> - * fills it into @backing depending on the 'backingStoreRaw' property of @parent
> + * fills it into @backing depending on the passed parentRaw (backingStoreRaw)
> * and other data. Note that for local storage this function accesses the file
> - * to update the actual type of the backing store.
> + * to update the actual type of the child store.
> *
> - * Returns 0 on success, 1 if we could parse all location data but the backinig
> + * Returns 0 on success, 1 if we could parse all location data but the child
> * store specification contained other data unrepresentable by libvirt (e.g.
> * inline authentication).
> * In both cases @src is filled. On error -1 is returned @src is NULL and an
> * error is reported.
> */
> -int
> -virStorageSourceNewFromBacking(virStorageSourcePtr parent,
> - virStorageSourcePtr *backing)
> +static int
> +virStorageSourceNewFromChild(virStorageSourcePtr parent,
> + const char *parentRaw,
> + virStorageSourcePtr *child)
> {
> struct stat st;
> VIR_AUTOUNREF(virStorageSourcePtr) def = NULL;
> int rc = 0;
>
> - *backing = NULL;
> + *child = NULL;
>
> - if (virStorageIsRelative(parent->backingStoreRaw)) {
> - if (!(def = virStorageSourceNewFromBackingRelative(parent,
> - parent->backingStoreRaw)))
> + if (virStorageIsRelative(parentRaw)) {
> + if (!(def = virStorageSourceNewFromBackingRelative(parent, parentRaw)))
> return -1;
> } else {
> - if ((rc = virStorageSourceNewFromBackingAbsolute(parent->backingStoreRaw,
> - &def)) < 0)
> + if ((rc = virStorageSourceNewFromBackingAbsolute(parentRaw, &def)) < 0)
> return -1;
> }
>
> @@ -3767,10 +3767,25 @@ virStorageSourceNewFromBacking(virStorageSourcePtr parent,
> if (virStorageSourceInitChainElement(def, parent, true) < 0)
> return -1;
>
> - def->readonly = true;
> def->detected = true;
>
> - VIR_STEAL_PTR(*backing, def);
> + VIR_STEAL_PTR(*child, def);
> + return rc;
> +}
> +
> +
> +int
> +virStorageSourceNewFromBacking(virStorageSourcePtr parent,
> + virStorageSourcePtr *backing)
> +{
> + int rc;
> +
> + if ((rc = virStorageSourceNewFromChild(parent,
> + parent->backingStoreRaw,
> + backing)) < 0)
> + return rc;
> +
> + (*backing)->readonly = true;
> return rc;
> }
>
More information about the libvir-list
mailing list