[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