[Libvirt-cim] [PATCH] Fix storage volume generation so that bytes are supported
Richard Maciel
rmaciel at linux.vnet.ibm.com
Thu Jan 14 23:32:17 UTC 2010
+1
(my last patch review ;-( )
On 01/13/2010 07:34 PM, Kaitlin Rupert wrote:
> # HG changeset patch
> # User Kaitlin Rupert<karupert at us.ibm.com>
> # Date 1263415515 28800
> # Node ID b57ba34c0932d77e11f65282dec5c2094d6ba818
> # Parent 2e80fd8fdbc575decc0b8a1623f8b9ad9122dccf
> Fix storage volume generation so that bytes are supported
>
> If the units portion of the<capacity> tag isn't specified, then libvirt
> will create the storage volume using bytes as the unit type. libvirt-cim
> wasn't supporting this behavior properl. Instead of assuming gigabytes as the
> default, libvirt will assume bytes when no unit is specified.
>
> If a unit is specified, it needs to be one of the following supported types:
> 'k', 'K', 'm', 'M', 'g', 'G', 't', 'T', 'p', 'P', 'y', or 'Y'.
>
> Signed-off-by: Kaitlin Rupert<karupert at us.ibm.com>
>
> diff -r 2e80fd8fdbc5 -r b57ba34c0932 libxkutil/xmlgen.c
> --- a/libxkutil/xmlgen.c Fri Dec 11 18:04:28 2009 -0800
> +++ b/libxkutil/xmlgen.c Wed Jan 13 12:45:15 2010 -0800
> @@ -1129,8 +1129,12 @@
>
> free(string);
>
> - if (xmlNewProp(cap, BAD_CAST "unit", BAD_CAST vol->cap_units) == NULL)
> - goto out;
> + if (vol->cap_units != NULL) {
> + xmlAttrPtr tmp = NULL;
> + tmp = xmlNewProp(cap, BAD_CAST "unit", BAD_CAST vol->cap_units);
> + if (tmp == NULL)
> + goto out;
> + }
>
> target = xmlNewChild(v, NULL, BAD_CAST "target", NULL);
> if (target == NULL)
> diff -r 2e80fd8fdbc5 -r b57ba34c0932 src/Virt_ResourcePoolConfigurationService.c
> --- a/src/Virt_ResourcePoolConfigurationService.c Fri Dec 11 18:04:28 2009 -0800
> +++ b/src/Virt_ResourcePoolConfigurationService.c Wed Jan 13 12:45:15 2010 -0800
> @@ -727,10 +727,10 @@
> res->res.storage_vol.cap = int_val;
>
> free(res->res.storage_vol.cap_units);
> - if (cu_get_str_prop(inst, "AllocationUnits",&val) != CMPI_RC_OK)
> - res->res.storage_vol.cap_units = strdup("G");
> + if (cu_get_str_prop(inst, "AllocationUnits",&val) == CMPI_RC_OK)
> + res->res.storage_vol.cap_units = strdup(val);
> else
> - res->res.storage_vol.cap_units = strdup(val);
> + res->res.storage_vol.cap_units = NULL;
>
> out:
>
> diff -r 2e80fd8fdbc5 -r b57ba34c0932 src/Virt_SettingsDefineCapabilities.c
> --- a/src/Virt_SettingsDefineCapabilities.c Fri Dec 11 18:04:28 2009 -0800
> +++ b/src/Virt_SettingsDefineCapabilities.c Wed Jan 13 12:45:15 2010 -0800
> @@ -1044,10 +1044,11 @@
> }
>
> #if VIR_USE_LIBVIRT_STORAGE
> -static CMPIStatus new_volume_template(const CMPIObjectPath *ref,
> - int template_type,
> - virStoragePoolPtr poolptr,
> - struct inst_list *list)
> +static CMPIStatus _new_volume_template(const CMPIObjectPath *ref,
> + int template_type,
> + virStoragePoolPtr poolptr,
> + const char *units,
> + struct inst_list *list)
> {
> const char *id;
> CMPIStatus s = {CMPI_RC_OK, NULL};
> @@ -1059,7 +1060,6 @@
> const char *path;
> uint16_t alloc = 0;
> uint16_t cap = 0;
> - const char *units;
>
> switch(template_type) {
> case SDC_RASD_MIN:
> @@ -1116,8 +1116,9 @@
> cap = 0;
> CMSetProperty(inst, "Capacity", (CMPIValue *)&cap, CMPI_uint16);
>
> - units = "G";
> - CMSetProperty(inst, "AllocationUnits", (CMPIValue *)units, CMPI_chars);
> + if (units != NULL)
> + CMSetProperty(inst, "AllocationUnits",
> + (CMPIValue *)units, CMPI_chars);
>
> inst_list_add(list, inst);
>
> @@ -1127,6 +1128,25 @@
> return s;
> }
>
> +static CMPIStatus new_volume_template(const CMPIObjectPath *ref,
> + int template_type,
> + virStoragePoolPtr poolptr,
> + struct inst_list *list)
> +{
> + CMPIStatus s = {CMPI_RC_OK, NULL};
> + const char *units = NULL;
> +
> + s = _new_volume_template(ref, template_type, poolptr, units, list);
> + if (s.rc != CMPI_RC_OK)
> + goto out;
> +
> + units = "G";
> + s = _new_volume_template(ref, template_type, poolptr, units, list);
> +
> + out:
> + return s;
> +}
> +
> static CMPIStatus avail_volume_template(const CMPIObjectPath *ref,
> int template_type,
> virStorageVolPtr volume_ptr,
>
> _______________________________________________
> Libvirt-cim mailing list
> Libvirt-cim at redhat.com
> https://www.redhat.com/mailman/listinfo/libvirt-cim
--
Richard Maciel, MSc
IBM Linux Technology Center
rmaciel at linux.vnet.ibm.com
More information about the Libvirt-cim
mailing list