Richard W.M. Jones
2009-Dec-18 19:25 UTC
[Libguestfs] [PATCH] daemon: Work around udevsettle issue (RHBZ#548121).
-- Richard Jones, Virtualization Group, Red Hat http://people.redhat.com/~rjones virt-p2v converts physical machines to virtual machines. Boot with a live CD or over the network (PXE) and turn machines into Xen guests. http://et.redhat.com/~rjones/virt-p2v -------------- next part -------------->From 5c6147ecc7ee3cf657edb1e19ad5ab4e973424e0 Mon Sep 17 00:00:00 2001From: Richard Jones <rjones at redhat.com> Date: Fri, 18 Dec 2009 19:20:37 +0000 Subject: [PATCH] daemon: Work around udevsettle issue (RHBZ#548121). --- daemon/guestfsd.c | 30 +++++++++--------------------- 1 files changed, 9 insertions(+), 21 deletions(-) diff --git a/daemon/guestfsd.c b/daemon/guestfsd.c index 520a4a4..0fc0128 100644 --- a/daemon/guestfsd.c +++ b/daemon/guestfsd.c @@ -1038,31 +1038,19 @@ device_name_translation (char *device, const char *func) * involved. eg. You can create or remove some device, but the /dev * device node won't appear until some time later. This means that * you get an error if you run one command followed by another. + * * Use 'udevadm settle' after certain commands, but don't be too * fussed if it fails. + * + * 'udevsettle' was the old name for this command (RHEL 5). This was + * deprecated in favour of 'udevadm settle'. The old 'udevsettle' + * command was left as a symlink. Then in Fedora 13 the old symlink + * remained but it stopped working (RHBZ#548121), so we have to be + * careful not to assume that we can use 'udevsettle' if it exists. */ void udev_settle (void) { - 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: - ; - } + (void) command (NULL, NULL, "/sbin/udevadm", "settle", NULL); + (void) command (NULL, NULL, "/sbin/udevsettle", NULL); } -- 1.6.5.2
Richard W.M. Jones
2009-Dec-21 12:28 UTC
[Libguestfs] [PATCH] daemon: Work around udevsettle issue (RHBZ#548121).
On Fri, Dec 18, 2009 at 07:25:12PM +0000, Richard W.M. Jones wrote:> >From 5c6147ecc7ee3cf657edb1e19ad5ab4e973424e0 Mon Sep 17 00:00:00 2001 > From: Richard Jones <rjones at redhat.com> > Date: Fri, 18 Dec 2009 19:20:37 +0000 > Subject: [PATCH] daemon: Work around udevsettle issue (RHBZ#548121). > > --- > daemon/guestfsd.c | 30 +++++++++--------------------- > 1 files changed, 9 insertions(+), 21 deletions(-) > > diff --git a/daemon/guestfsd.c b/daemon/guestfsd.c > index 520a4a4..0fc0128 100644 > --- a/daemon/guestfsd.c > +++ b/daemon/guestfsd.c > @@ -1038,31 +1038,19 @@ device_name_translation (char *device, const char *func) > * involved. eg. You can create or remove some device, but the /dev > * device node won't appear until some time later. This means that > * you get an error if you run one command followed by another. > + * > * Use 'udevadm settle' after certain commands, but don't be too > * fussed if it fails. > + * > + * 'udevsettle' was the old name for this command (RHEL 5). This was > + * deprecated in favour of 'udevadm settle'. The old 'udevsettle' > + * command was left as a symlink. Then in Fedora 13 the old symlink > + * remained but it stopped working (RHBZ#548121), so we have to be > + * careful not to assume that we can use 'udevsettle' if it exists. > */ > void > udev_settle (void) > { > - 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: > - ; > - } > + (void) command (NULL, NULL, "/sbin/udevadm", "settle", NULL); > + (void) command (NULL, NULL, "/sbin/udevsettle", NULL); > }I verified that this fixes the original build problem on Koji, so I'm going to push this now. Rich. -- Richard Jones, Virtualization Group, Red Hat http://people.redhat.com/~rjones Read my programming blog: http://rwmj.wordpress.com Fedora now supports 80 OCaml packages (the OPEN alternative to F#) http://cocan.org/getting_started_with_ocaml_on_red_hat_and_fedora