[libvirt] [PATCH 4/5] nodedev: Introduce udevHandleOneDevice

John Ferlan jferlan at redhat.com
Tue Aug 1 19:46:44 UTC 2017



On 07/26/2017 02:44 AM, Erik Skultety wrote:
> Let this new method handle the device object we obtained from the
> monitor in order to enhance readability.
> 
> Signed-off-by: Erik Skultety <eskultet at redhat.com>
> ---
>  src/node_device/node_device_udev.c | 31 ++++++++++++++++++-------------
>  1 file changed, 18 insertions(+), 13 deletions(-)
> 
> diff --git a/src/node_device/node_device_udev.c b/src/node_device/node_device_udev.c
> index cd19e79c1..7ecb330df 100644
> --- a/src/node_device/node_device_udev.c
> +++ b/src/node_device/node_device_udev.c
> @@ -1599,6 +1599,23 @@ nodeStateCleanup(void)
>  }
>  
>  
> +static int

Caller never checks status, so what's the point?  I'd just go with void,
unless at some point in time you were going to provide some sort of
error/warning that the action failed or was unrecognized, similar to
when the udevAddOneDevice call in udevProcessDeviceListEntry fails...

Perhaps "the next" step for this function could be:

if ((STREQ("add") || STREQ("change)) &&
    udevAdd() == 0)
    return;

if (STREQ("remove") && udevRemove() == 0)
    return;

VIR_WARN(), using something like:

"Failed to %s device %s", NULLSTR(action),
NULLSTR(udev_device_get_syspath(device));

I use NULLSTR only because on failure it could return NULL... Similarly,
action could be NULL according to the man page... Of course that means
those STREQ's should be STREQ_NULLABLE.

I'd use VIR_WARN unless you're really handling the failure somehow... At
least VIR_WARN will hopefully write something somewhere.


> +udevHandleOneDevice(struct udev_device *device)
> +{
> +    const char *action = udev_device_get_action(device);
> +
> +    VIR_DEBUG("udev action: '%s'", action);
> +
> +    if (STREQ(action, "add") || STREQ(action, "change"))
> +        return udevAddOneDevice(device);
> +
> +    if (STREQ(action, "remove"))
> +        return udevRemoveOneDevice(device);
> +
> +    return 0;
> +}
> +
> +
>  static void
>  udevEventHandleCallback(int watch ATTRIBUTE_UNUSED,
>                          int fd,
> @@ -1607,7 +1624,6 @@ udevEventHandleCallback(int watch ATTRIBUTE_UNUSED,
>  {
>      struct udev_device *device = NULL;
>      struct udev_monitor *udev_monitor = DRV_STATE_UDEV_MONITOR(driver);
> -    const char *action = NULL;
>      int udev_fd = -1;
>  
>      udev_fd = udev_monitor_get_fd(udev_monitor);
> @@ -1635,18 +1651,7 @@ udevEventHandleCallback(int watch ATTRIBUTE_UNUSED,
>          goto cleanup;
>      }
>  
> -    action = udev_device_get_action(device);
> -    VIR_DEBUG("udev action: '%s'", action);
> -
> -    if (STREQ(action, "add") || STREQ(action, "change")) {
> -        udevAddOneDevice(device);
> -        goto cleanup;
> -    }
> -
> -    if (STREQ(action, "remove")) {
> -        udevRemoveOneDevice(device);
> -        goto cleanup;
> -    }
> +    udevHandleOneDevice(device);

Not everyone likes the ignore_value();, so since we're not deciding to
bail if the handling fails, I think using void for the function is fine.

Still for pure code motion... You have my:

Reviewed-by: John Ferlan <jferlan at redhat.com>

Although I'm not sure (yet) what value this would provide.

John

>  
>   cleanup:
>      udev_device_unref(device);
> 




More information about the libvir-list mailing list