[libvirt] [PATCH 3/4] m4: Provide default value fore UDEVADM

Ján Tomko jtomko at redhat.com
Fri May 17 12:33:51 UTC 2019


On Fri, May 17, 2019 at 11:54:16AM +0200, Michal Privoznik wrote:
>https://bugzilla.redhat.com/show_bug.cgi?id=1710575
>
>It may happen that the system where libvirt is built at doesn't
>have udevadm binary but the one where it runs does have it.
>If we change how udevadm is ran in virWaitForDevices() then we

s/ran/run/

>can safely pass a default value in m4 macro.
>
>Signed-off-by: Michal Privoznik <mprivozn at redhat.com>
>---
> m4/virt-external-programs.m4 |  9 +++------
> src/util/virutil.c           | 14 ++++++--------
> 2 files changed, 9 insertions(+), 14 deletions(-)
>
>diff --git a/m4/virt-external-programs.m4 b/m4/virt-external-programs.m4
>index 3c915e1a65..f1ae104b32 100644
>--- a/m4/virt-external-programs.m4
>+++ b/m4/virt-external-programs.m4
>@@ -45,7 +45,7 @@ AC_DEFUN([LIBVIRT_CHECK_EXTERNAL_PROGRAMS], [
>   AC_PATH_PROG([DNSMASQ], [dnsmasq], [dnsmasq], [$LIBVIRT_SBIN_PATH])
>   AC_PATH_PROG([RADVD], [radvd], [radvd], [$LIBVIRT_SBIN_PATH])
>   AC_PATH_PROG([TC], [tc], [tc], [$LIBVIRT_SBIN_PATH])
>-  AC_PATH_PROG([UDEVADM], [udevadm], [], [$LIBVIRT_SBIN_PATH])
>+  AC_PATH_PROG([UDEVADM], [udevadm], [udevadm], [$LIBVIRT_SBIN_PATH])
>   AC_PATH_PROG([MODPROBE], [modprobe], [modprobe], [$LIBVIRT_SBIN_PATH])
>   AC_PATH_PROG([RMMOD], [rmmod], [rmmod], [$LIBVIRT_SBIN_PATH])
>   AC_PATH_PROG([MMCTL], [mm-ctl], [mm-ctl], [$LIBVIRT_SBIN_PATH])
>@@ -65,11 +65,8 @@ AC_DEFUN([LIBVIRT_CHECK_EXTERNAL_PROGRAMS], [
>                      [Location or name of the mm-ctl program])
>   AC_DEFINE_UNQUOTED([OVSVSCTL], ["$OVSVSCTL"],
>                      [Location or name of the ovs-vsctl program])
>-
>-  if test -n "$UDEVADM"; then
>-    AC_DEFINE_UNQUOTED([UDEVADM], ["$UDEVADM"],
>-                       [Location or name of the udevadm program])
>-  fi
>+  AC_DEFINE_UNQUOTED([UDEVADM], ["$UDEVADM"],
>+                     [Location or name of the udevadm program])
>   if test -n "$MODPROBE"; then
>     AC_DEFINE_UNQUOTED([MODPROBE], ["$MODPROBE"],
>                        [Location or name of the modprobe program])
>diff --git a/src/util/virutil.c b/src/util/virutil.c
>index ecef24d2f3..2db0e9769c 100644
>--- a/src/util/virutil.c
>+++ b/src/util/virutil.c
>@@ -1479,25 +1479,23 @@ virSetUIDGIDWithCaps(uid_t uid, gid_t gid, gid_t *groups, int ngroups,
> #endif
>
>
>-#if defined(UDEVADM)
> void virWaitForDevices(void)
> {
>-    const char *const settleprog[] = { UDEVADM, "settle", NULL };
>+    VIR_AUTOPTR(virCommand) cmd = NULL;
>+    VIR_AUTOFREE(char *) udev = NULL;
>     int exitstatus;
>
>-    if (access(settleprog[0], X_OK) != 0)
>+    if (!(udev = virFindFileInPath(UDEVADM)) ||
>+        !virFileIsExecutable(udev) ||

virFileIsExecutable is not necessary here, virFindFileInPath has already
done the check.

>+        !(cmd = virCommandNewArgList(udev, "settle", NULL)))

Please give this condition a separate 'if'.

>         return;
>
>     /*
>      * NOTE: we ignore errors here; this is just to make sure that any device
>      * nodes that are being created finish before we try to scan them.
>      */

I'm not sure what kind of errors can happen here, but we should be able
to expect that 'udevadm' is present on a Linux system. Reporting an
error in that case might be better than silently dropping devices.

But strictly speaking, this patch is an improvement, so:
Reviewed-by: Ján Tomko <jtomko at redhat.com>

Jano

>-    ignore_value(virRun(settleprog, &exitstatus));
>+    ignore_value(virCommandRun(cmd, &exitstatus));
> }
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 488 bytes
Desc: not available
URL: <http://listman.redhat.com/archives/libvir-list/attachments/20190517/b5d03d76/attachment-0001.sig>


More information about the libvir-list mailing list