[libvirt] [PATCH v2] add func to set shared drivers after libvirtd init

Maxim Nestratov mnestratov at virtuozzo.com
Fri Mar 18 08:52:02 UTC 2016


19.11.2015 15:22, Mikhail Feoktistov пишет:
> Diff from v1:
> Remove vz prefix from the title of this letter. Because this is the common case
> for all drivers in libvirt.
>
> Description:
> Built-in drivers in libvirt are initialized before libvirtd initialization.
> Libvirt loads shared drivers on libvirtd initialization step.
> For built-in drivers we can't set shared drivers, because they are not initialized yet.
> This patch adds function to set shared drivers after libvirtd init.
> ---
>   daemon/libvirtd.c        |  4 ++++
>   src/libvirt.c            | 41 +++++++++++++++++++++++++++++++++++++++++
>   src/libvirt_internal.h   |  1 +
>   src/libvirt_private.syms |  1 +
>   4 files changed, 47 insertions(+)
>
> diff --git a/daemon/libvirtd.c b/daemon/libvirtd.c
> index 250094b..aac1826 100644
> --- a/daemon/libvirtd.c
> +++ b/daemon/libvirtd.c
> @@ -431,6 +431,10 @@ static void daemonInitialize(void)
>       bhyveRegister();
>   # endif
>   #endif
> +# ifdef WITH_VZ
> +    virAssignSharedDrivers("vz");
> +    virAssignSharedDrivers("Parallels");
> +# endif
>   }
>   
>   
> diff --git a/src/libvirt.c b/src/libvirt.c
> index 25a0040..1763be7 100644
> --- a/src/libvirt.c
> +++ b/src/libvirt.c
> @@ -1433,3 +1433,44 @@ virTypedParameterValidateSet(virConnectPtr conn,
>       }
>       return 0;
>   }
> +
> +/**
> + * virAssignSharedDrivers:
> + * @name: name of connection driver
> + *
> + * This function fills in any empty pointers for shared drivers
> + * in connect driver structure
> + *
> + * Returns 0 in case of success, -1 in case of error
> +*/
> +int
> +virAssignSharedDrivers(const char *name)
> +{
> +    size_t i;
> +
> +    if (name == NULL) {
> +        virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
> +                       _("Driver name must be specified"));
> +        return -1;
> +    }
> +
> +    for (i = 0; i < virConnectDriverTabCount; i++) {
> +        if (STREQ(virConnectDriverTab[i]->hypervisorDriver->name, name)) {
> +            if (virConnectDriverTab[i]->interfaceDriver == NULL)
> +                virConnectDriverTab[i]->interfaceDriver = virSharedInterfaceDriver;
> +            if (virConnectDriverTab[i]->networkDriver == NULL)
> +                virConnectDriverTab[i]->networkDriver = virSharedNetworkDriver;
> +            if (virConnectDriverTab[i]->nodeDeviceDriver == NULL)
> +                virConnectDriverTab[i]->nodeDeviceDriver = virSharedNodeDeviceDriver;
> +            if (virConnectDriverTab[i]->nwfilterDriver == NULL)
> +                virConnectDriverTab[i]->nwfilterDriver = virSharedNWFilterDriver;
> +            if (virConnectDriverTab[i]->secretDriver == NULL)
> +                virConnectDriverTab[i]->secretDriver = virSharedSecretDriver;
> +            if (virConnectDriverTab[i]->storageDriver == NULL)
> +                virConnectDriverTab[i]->storageDriver = virSharedStorageDriver;
> +            break;
> +       }
> +    }
> +
> +    return 0;
> +}
> diff --git a/src/libvirt_internal.h b/src/libvirt_internal.h
> index 1313b58..2a7227b 100644
> --- a/src/libvirt_internal.h
> +++ b/src/libvirt_internal.h
> @@ -289,4 +289,5 @@ virTypedParameterValidateSet(virConnectPtr conn,
>                                virTypedParameterPtr params,
>                                int nparams);
>   
> +int virAssignSharedDrivers(const char *name);
>   #endif
> diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms
> index a835f18..a0fcdf5 100644
> --- a/src/libvirt_private.syms
> +++ b/src/libvirt_private.syms
> @@ -943,6 +943,7 @@ virFDStreamSetInternalCloseCb;
>   
>   
>   # libvirt_internal.h
> +virAssignSharedDrivers;
>   virConnectSupportsFeature;
>   virDomainMigrateBegin3;
>   virDomainMigrateBegin3Params;

ACK once again, but someone else should see as well.
This patch allows clients using vz driver to use all shared drivers 
facilities and we are very interested in it.
Anyone to volunteer?

Thanks in advance.




More information about the libvir-list mailing list