[libvirt] [PATCH 2/3] storage: Allow for inputvol to have any format for encryption

Michal Privoznik mprivozn at redhat.com
Tue Sep 11 11:16:21 UTC 2018


On 08/21/2018 06:23 PM, John Ferlan wrote:
> Commit 39cef12a9 altered/fixed the inputvol processing to create
> a multistep process when using an inputvol to create an encrypted
> output volume; however, it unnecessarily assumed/restricted the
> inputvol to be of 'raw' format only.
> 
> Modify the processing code to allow the inputvol format to be checked
> and used in order to create the encrypted volume.
> 
> Signed-off-by: John Ferlan <jferlan at redhat.com>
> ---
>  src/storage/storage_util.c                    | 15 +++++++++++--
>  .../luks-convert-qcow2.argv                   |  9 ++++++++
>  tests/storagevolxml2argvtest.c                |  4 ++++
>  tests/storagevolxml2xmlin/vol-file-qcow2.xml  | 21 +++++++++++++++++++
>  4 files changed, 47 insertions(+), 2 deletions(-)
>  create mode 100644 tests/storagevolxml2argvdata/luks-convert-qcow2.argv
>  create mode 100644 tests/storagevolxml2xmlin/vol-file-qcow2.xml
> 
> diff --git a/src/storage/storage_util.c b/src/storage/storage_util.c
> index b32e3ccf7d..cc49a5b9f7 100644
> --- a/src/storage/storage_util.c
> +++ b/src/storage/storage_util.c
> @@ -699,6 +699,7 @@ storagePloopResize(virStorageVolDefPtr vol,
>  struct _virStorageBackendQemuImgInfo {
>      int format;
>      const char *type;
> +    const char *inputType;
>      const char *path;
>      unsigned long long size_arg;
>      unsigned long long allocation;
> @@ -1021,6 +1022,15 @@ virStorageBackendCreateQemuImgSetInfo(virStoragePoolObjPtr pool,
>          return -1;
>      }
>  
> +    if (inputvol &&
> +        !(info->inputType =
> +          virStorageFileFormatTypeToString(inputvol->target.format))) {
> +        virReportError(VIR_ERR_INTERNAL_ERROR,
> +                       _("unknown inputvol storage vol type %d"),
> +                       inputvol->target.format);
> +        return -1;
> +    }
> +
>      if (info->preallocate && info->format != VIR_STORAGE_FILE_QCOW2) {
>          virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
>                         _("metadata preallocation only available with qcow2"));
> @@ -1080,6 +1090,7 @@ virStorageBackendCreateQemuImgCmdFromVol(virStoragePoolObjPtr pool,
>      struct _virStorageBackendQemuImgInfo info = {
>          .format = vol->target.format,
>          .type = NULL,
> +        .inputType = NULL,
>          .path = vol->target.path,
>          .allocation = vol->target.allocation,
>          .encryption = !!vol->target.encryption,
> @@ -1152,8 +1163,8 @@ virStorageBackendCreateQemuImgCmdFromVol(virStoragePoolObjPtr pool,
>              virCommandAddArgFormat(cmd, "%lluK", info.size_arg);
>      } else {
>          /* source */
> -        virCommandAddArgFormat(cmd, "driver=raw,file.filename=%s",
> -                               info.inputPath);
> +        virCommandAddArgFormat(cmd, "driver=%s,file.filename=%s",
> +                               info.inputType, info.inputPath);

so if inputvol == NULL in virStorageBackendCreateQemuImgSetInfo then
info.inputType is also NULL. Don't we need something like:

info.inputType ? info.inputType : "raw"

(I wish we could use GNU extensions and write is as
info.inputType ?: "raw" )

Michal




More information about the libvir-list mailing list