mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2025-01-03 11:35:19 +00:00
util: Force reading of meta data to get encryption capacity value
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.
This commit is contained in:
parent
d65781bf06
commit
5431055d2b
@ -3606,13 +3606,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;
|
||||
|
Loading…
Reference in New Issue
Block a user