Richard W.M. Jones wrote:
 Subject: [PATCH] daemon/RHEL: Choose correct udev settle script.
 On RHEL/CentOS 5.4, udevadm settle command does not work.  This didn't
 affect us before, but now that we're using parted for partitioning, we
 *do* need to wait for udev to settle (because parted isn't waiting for
 this, unlike sfdisk).
 This commit chooses the correct program to run.
 ---
  daemon/guestfsd.c |   22 +++++++++++++++++++++-
  1 files changed, 21 insertions(+), 1 deletions(-)
 diff --git a/daemon/guestfsd.c b/daemon/guestfsd.c
 index db0bff9..9375ede 100644
 --- a/daemon/guestfsd.c
 +++ b/daemon/guestfsd.c
 @@ -976,5 +976,25 @@ device_name_translation (char *device, const char *func)
  void
  udev_settle (void)
  {
 -  command (NULL, NULL, "/sbin/udevadm", "settle", NULL);
 +  static int which_prog = 0;
 +
 +  if (which_prog == 0) {
 +    if (access ("/sbin/udevsettle", X_OK) == 0)
 +      which_prog = 2;
 +    else if (access ("/sbin/udevadm", X_OK) == 0)
 +      which_prog = 1;
 +    else
 +      which_prog = 3;
 +  }
 +  switch (which_prog) {
 +  case 1:
 +    command (NULL, NULL, "/sbin/udevadm", "settle", NULL);
 +    break;
 +  case 2:
 +    command (NULL, NULL, "/sbin/udevsettle", NULL);
 +    break;
 +  default:
 +    ;
 +  } 
Looks fine.
Only thought was "why bother with the static var and separate switch"
just to save a call or two to access.  If you're about to invoke
one of those programs, the expense of a syscall is nil.