[libvirt] [PATCH 02/10] storage: Add new argument for createVol backend API

Eric Blake eblake at redhat.com
Thu Jan 9 22:53:07 UTC 2014


On 01/09/2014 09:15 AM, Peter Krempa wrote:
> ---

A little sparse on the intent of the new flag...

>  src/storage/storage_backend.h          |  2 +-
>  src/storage/storage_backend_disk.c     |  3 ++-
>  src/storage/storage_backend_fs.c       | 30 +++++++++++++++++++++++-------
>  src/storage/storage_backend_logical.c  |  6 ++++--
>  src/storage/storage_backend_rbd.c      |  3 ++-
>  src/storage/storage_backend_sheepdog.c |  3 ++-
>  src/storage/storage_driver.c           |  4 ++--
>  7 files changed, 36 insertions(+), 15 deletions(-)
> 
> diff --git a/src/storage/storage_backend.h b/src/storage/storage_backend.h
> index 9e07dd8..4d0c057 100644
> --- a/src/storage/storage_backend.h
> +++ b/src/storage/storage_backend.h
> @@ -41,7 +41,7 @@ typedef int (*virStorageBackendDeletePool)(virConnectPtr conn, virStoragePoolObj
>  typedef int (*virStorageBackendBuildVol)(virConnectPtr conn,
>                                           virStoragePoolObjPtr pool, virStorageVolDefPtr vol,
>                                           unsigned int flags);
> -typedef int (*virStorageBackendCreateVol)(virConnectPtr conn, virStoragePoolObjPtr pool, virStorageVolDefPtr vol);
> +typedef int (*virStorageBackendCreateVol)(virConnectPtr conn, virStoragePoolObjPtr pool, virStorageVolDefPtr vol, bool internal);

...and maybe worth line-wrapping the long lines in this area of code.
But know I know what the patch is doing - adding an internal flag; where
use of the flag can suppress error reporting (since presumably all
internal creation would be done on a name already tied to a <domain>,
where we can assume that the name is either valid or the domain will
fail to start).

> @@ -1008,15 +1010,29 @@ virStorageBackendFileSystemVolCreate(virConnectPtr conn ATTRIBUTE_UNUSED,
>                      vol->name) == -1)
>          return -1;
> 
> -    if (virFileExists(vol->target.path)) {
> -        virReportError(VIR_ERR_OPERATION_INVALID,
> -                       _("volume target path '%s' already exists"),
> -                       vol->target.path);
> -        return -1;
> +    if (internal) {
> +        if (stat(vol->target.path, &st) == 0) {
> +            if (S_ISDIR(st.st_mode))
> +                vol->type = VIR_STORAGE_VOL_DIR;
> +            else if (S_ISBLK(st.st_mode))
> +                vol->type = VIR_STORAGE_VOL_BLOCK;
> +            else
> +                vol->type = VIR_STORAGE_VOL_FILE;
> +        }

And if the stat() fails, you just leave vol->type uninitialized?

-- 
Eric Blake   eblake redhat com    +1-919-301-3266
Libvirt virtualization library http://libvirt.org

-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 604 bytes
Desc: OpenPGP digital signature
URL: <http://listman.redhat.com/archives/libvir-list/attachments/20140109/131ecf6e/attachment-0001.sig>


More information about the libvir-list mailing list