[libvirt] [PATCH] util: Force reading of meta data to get encryption capacity value

John Ferlan jferlan at redhat.com
Thu Jun 22 22:27:51 UTC 2017


ping?

Tks,

John

(too bad this missed an internal RHEL deadline... <sigh>)


On 06/15/2017 03:31 PM, John Ferlan wrote:
> https://bugzilla.redhat.com/show_bug.cgi?id=1371892
> 
> As it turns out the volume create, build, and refresh path was not peeking
> at the meta data, so immediately after a create operation the value displayed
> for capacity was still incorrect. However, if a pool refresh was done the
> correct value was fetched as a result of a meta data peek.
> 
> The reason is it seems historically if the file type is RAW then peeking
> at the file just took the physical value for the capacity. However, since
> we know if it's an encrypted file, then peeking at the meta data will be
> required in order to get a true capacity value.
> 
> So check for encryption in the source and if present, use the meta data
> in order to fill in the capacity value and set the payload_offset.
> 
> Signed-off-by: John Ferlan <jferlan at redhat.com>
> ---
>  src/util/virstoragefile.c | 11 +++++++----
>  1 file changed, 7 insertions(+), 4 deletions(-)
> 
> diff --git a/src/util/virstoragefile.c b/src/util/virstoragefile.c
> index e82a7fb..11c3625 100644
> --- a/src/util/virstoragefile.c
> +++ b/src/util/virstoragefile.c
> @@ -3446,13 +3446,16 @@ virStorageSourceUpdateCapacity(virStorageSourcePtr src,
>          src->format = format;
>      }
>  
> -    if (format == VIR_STORAGE_FILE_RAW)
> +    if (format == VIR_STORAGE_FILE_RAW && !src->encryption) {
>          src->capacity = src->physical;
> -    else if ((meta = virStorageFileGetMetadataFromBuf(src->path, buf,
> -                                                      len, format, NULL)))
> +    } else if ((meta = virStorageFileGetMetadataFromBuf(src->path, buf,
> +                                                        len, format, NULL))) {
>          src->capacity = meta->capacity ? meta->capacity : src->physical;
> -    else
> +        if (src->encryption && meta->encryption)
> +            src->encryption->payload_offset = meta->encryption->payload_offset;
> +    } else {
>          goto cleanup;
> +    }
>  
>      if (src->encryption && src->encryption->payload_offset != -1)
>          src->capacity -= src->encryption->payload_offset * 512;
> 




More information about the libvir-list mailing list