[libvirt] [PATCH 1/3] Introduce node device update event as top level event

Cole Robinson crobinso at redhat.com
Mon Aug 15 12:35:17 UTC 2016


On 08/11/2016 11:15 AM, Jovanka Gulicoska wrote:
> Also includes node device update event implementation for udev
> backend.
> 

Hmm, because of the way nodedev-event and event-test.c are implemented, looks
like this throws some errors via the verify() and VIR_ENUM_IMPL sanity
checking. So looks like they all need to be updated at once

> Node device Update API:
> virConnectNodeDeviceEventUpdateCallback

Actually it doesn't add this, it just uses GenericCallback. So this reference
here should be dropped from the commit message.

> ---
>  daemon/remote.c                    | 29 ++++++++++++++++++++
>  include/libvirt/libvirt-nodedev.h  |  1 +
>  src/conf/node_device_event.c       | 55 ++++++++++++++++++++++++++++++++++++++
>  src/conf/node_device_event.h       |  3 +++
>  src/libvirt_private.syms           |  1 +
>  src/node_device/node_device_udev.c |  2 ++
>  src/remote/remote_driver.c         | 30 +++++++++++++++++++++
>  src/remote/remote_protocol.x       | 13 ++++++++-
>  src/remote_protocol-structs        |  5 ++++
>  9 files changed, 138 insertions(+), 1 deletion(-)
> 
> diff --git a/daemon/remote.c b/daemon/remote.c
> index 9e75472..155e9b0 100644
> --- a/daemon/remote.c
> +++ b/daemon/remote.c
> @@ -1388,8 +1388,37 @@ remoteRelayNodeDeviceEventLifecycle(virConnectPtr conn,
>      return 0;
>  }
>  
> +static int
> +remoteRelayNodeDeviceEventUpdate(virConnectPtr conn,
> +                                 virNodeDevicePtr dev,
> +                                 void *opaque)
> +{
> +    daemonClientEventCallbackPtr callback = opaque;
> +    remote_node_device_event_update_msg data;
> +
> +    if (callback->callbackID < 0 ||
> +        !remoteRelayNodeDeviceEventCheckACL(callback->client, conn, dev))
> +        return -1;
> +
> +    VIR_DEBUG("Relaying node device update event callback %d",
> +              callback->callbackID);
> +
> +    /* build return data */
> +    memset(&data, 0, sizeof(data));
> +    make_nonnull_node_device(&data.dev, dev);
> +    data.callbackID = callback->callbackID;
> +
> +    remoteDispatchObjectEventSend(callback->client, remoteProgram,
> +                                  REMOTE_PROC_NODE_DEVICE_EVENT_UPDATE,
> +                                  (xdrproc_t)xdr_remote_node_device_event_update_msg,
> +                                  &data);
> +
> +    return 0;
> +}
> +
>  static virConnectNodeDeviceEventGenericCallback nodeDeviceEventCallbacks[] = {
>      VIR_NODE_DEVICE_EVENT_CALLBACK(remoteRelayNodeDeviceEventLifecycle),
> +    VIR_NODE_DEVICE_EVENT_CALLBACK(remoteRelayNodeDeviceEventUpdate),
>  };
>  
>  verify(ARRAY_CARDINALITY(nodeDeviceEventCallbacks) == VIR_NODE_DEVICE_EVENT_ID_LAST);
> diff --git a/include/libvirt/libvirt-nodedev.h b/include/libvirt/libvirt-nodedev.h
> index 4ab6917..4ff8b41 100644
> --- a/include/libvirt/libvirt-nodedev.h
> +++ b/include/libvirt/libvirt-nodedev.h
> @@ -138,6 +138,7 @@ int                     virNodeDeviceDestroy    (virNodeDevicePtr dev);
>   */
>  typedef enum {
>      VIR_NODE_DEVICE_EVENT_ID_LIFECYCLE = 0, /* virConnectNodeDeviceEventLifecycleCallback */
> +    VIR_NODE_DEVICE_EVENT_ID_UPDATE = 1, /* virConnectNodeDeviceEventUpdateCallback */
>  

This reference here in the comment should also be changed to GenericCallback

Otherwise the code looks good to me, so I made those adjustments, squashed
these patches together, tweaked the commit message a bit, and pushed.

Thanks,
Cole




More information about the libvir-list mailing list