[libvirt] [PATCH 2/1] storage: Merge into 1/1
John Ferlan
jferlan at redhat.com
Tue May 10 11:20:09 UTC 2016
On 04/29/2016 11:34 AM, John Ferlan wrote:
> As it turns out, trusting that <allocation> being 0 means it wasn't
> provided isn't such a good idea.
>
> If someone provided a <capacity> of 10 and <allocation> of 0, then
> we need to honor it.
>
> So this patch which I'll merge into the previous patch will track
> when the XML is read if the allocation was provided or not. That
> way we can determine in this code that if allocation = 0, then
> "overwrite" with the capacity value if it wasn't provided.
>
> Signed-off-by: John Ferlan <jferlan at redhat.com>
> ---
> src/conf/storage_conf.c | 1 +
> src/storage/storage_driver.c | 11 ++++++-----
> src/util/virstoragefile.c | 1 +
> src/util/virstoragefile.h | 2 ++
> 4 files changed, 10 insertions(+), 5 deletions(-)
>
ping - any thoughts regarding squashing this in as well?
Tks -
John
> diff --git a/src/conf/storage_conf.c b/src/conf/storage_conf.c
> index daf8f99..a4708f6 100644
> --- a/src/conf/storage_conf.c
> +++ b/src/conf/storage_conf.c
> @@ -1364,6 +1364,7 @@ virStorageVolDefParseXML(virStoragePoolDefPtr pool,
> unit = virXPathString("string(./allocation/@unit)", ctxt);
> if (virStorageSize(unit, allocation, &ret->target.allocation) < 0)
> goto error;
> + ret->target.has_allocation = true;
> } else {
> ret->target.allocation = ret->target.capacity;
> }
> diff --git a/src/storage/storage_driver.c b/src/storage/storage_driver.c
> index 4415a4c..1ebee5b 100644
> --- a/src/storage/storage_driver.c
> +++ b/src/storage/storage_driver.c
> @@ -2043,11 +2043,12 @@ storageVolCreateXMLFrom(virStoragePoolPtr obj,
> if (newvol->target.capacity == 0)
> newvol->target.capacity = origvol->target.capacity;
>
> - /* If the new allocation is 0, then use capacity as it's specifically
> - * documented "If omitted when creating a volume, the volume will be
> - * fully allocated at time of creation.". This is especially important
> - * for logical volume creation. */
> - if (newvol->target.allocation == 0)
> + /* If the new allocation is 0 and the allocation was not provided in
> + * the XML, then use capacity as it's specifically documented "If
> + * omitted when creating a volume, the volume will be fully allocated
> + * at time of creation.". This is especially important for logical
> + * volume creation. */
> + if (newvol->target.allocation == 0 && !newvol->target.has_allocation)
> newvol->target.allocation = newvol->target.capacity;
>
> if (!backend->buildVolFrom) {
> diff --git a/src/util/virstoragefile.c b/src/util/virstoragefile.c
> index 05ac254..73151bd 100644
> --- a/src/util/virstoragefile.c
> +++ b/src/util/virstoragefile.c
> @@ -1835,6 +1835,7 @@ virStorageSourceCopy(const virStorageSource *src,
> ret->format = src->format;
> ret->capacity = src->capacity;
> ret->allocation = src->allocation;
> + ret->has_allocation = src->has_allocation;
> ret->physical = src->physical;
> ret->readonly = src->readonly;
> ret->shared = src->shared;
> diff --git a/src/util/virstoragefile.h b/src/util/virstoragefile.h
> index b98fe25..6edc789 100644
> --- a/src/util/virstoragefile.h
> +++ b/src/util/virstoragefile.h
> @@ -260,6 +260,8 @@ struct _virStorageSource {
> unsigned long long capacity; /* in bytes, 0 if unknown */
> unsigned long long allocation; /* in bytes, 0 if unknown */
> unsigned long long physical; /* in bytes, 0 if unknown */
> + bool has_allocation; /* Set to true when provided in XML */
> +
> size_t nseclabels;
> virSecurityDeviceLabelDefPtr *seclabels;
>
>
More information about the libvir-list
mailing list