[libvirt] [PATCH 5/6] util: refactor storage file checks to allow error reporting

Peter Krempa pkrempa at redhat.com
Thu Apr 26 09:15:42 UTC 2018


On Wed, Apr 25, 2018 at 16:52:42 +0100, Daniel Berrange wrote:
> The virStorageFileSupportsSecurityDriver and
> virStorageFileSupportsAccess currently just return a boolean
> value. This is ok because they don't have any failure scenarios
> but a subsequent patch is going to introduce potential failure
> scenario. This changes their return type from a boolean to an
> int with values -1, 0, 1.
> 
> Signed-off-by: Daniel P. Berrangé <berrange at redhat.com>
> ---
>  src/qemu/qemu_domain.c    | 21 +++++++++------
>  src/qemu/qemu_driver.c    |  6 +++--
>  src/util/virstoragefile.c | 66 +++++++++++++++++++++++++++++++----------------
>  src/util/virstoragefile.h |  4 +--
>  4 files changed, 63 insertions(+), 34 deletions(-)

[...]

> index f09035cd4a..da13d51d32 100644
> --- a/src/util/virstoragefile.c
> +++ b/src/util/virstoragefile.c
> @@ -4098,34 +4098,46 @@ virStorageFileIsInitialized(const virStorageSource *src)

[...]

> -static bool
> +static int
>  virStorageFileSupportsBackingChainTraversal(virStorageSourcePtr src)
>  {
>      virStorageFileBackendPtr backend;
> +    int ret;

Hmm, isn't 'rv' better in the case when this variable actually is not
returned?

>  
> -    if (!(backend = virStorageFileGetBackendForSupportCheck(src)))
> -        return false;
> +    ret = virStorageFileGetBackendForSupportCheck(src, &backend);
> +    if (ret < 0)
> +        return -1;
> +
> +    if (!backend)
> +        return 0;
>  
>      return backend->storageFileGetUniqueIdentifier &&
> -           backend->storageFileRead &&
> -           backend->storageFileAccess;
> +        backend->storageFileRead &&
> +        backend->storageFileAccess ? 1 : 0;

Alignment looks off

>  }
>  
>  
> @@ -4137,15 +4149,19 @@ virStorageFileSupportsBackingChainTraversal(virStorageSourcePtr src)
>   * Check if a storage file supports operations needed by the security
>   * driver to perform labelling
>   */
> -bool
> +int
>  virStorageFileSupportsSecurityDriver(const virStorageSource *src)
>  {
>      virStorageFileBackendPtr backend;
> +    int ret;

As in above hunk.

>  
> -    if (!(backend = virStorageFileGetBackendForSupportCheck(src)))
> -        return false;
> +    ret = virStorageFileGetBackendForSupportCheck(src, &backend);
> +    if (ret < 0)
> +        return -1;
> +    if (backend == NULL)
> +        return 0;
>  
> -    return !!backend->storageFileChown;
> +    return backend->storageFileChown ? 1 : 0;

ACK
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 833 bytes
Desc: not available
URL: <http://listman.redhat.com/archives/libvir-list/attachments/20180426/e0952652/attachment-0001.sig>


More information about the libvir-list mailing list