[systemd-devel] udevadm settle hangs due to veths in seperate network namespaces

Daniel P. Berrange berrange at redhat.com
Fri Jul 12 06:51:10 PDT 2013


We're hitting a problem in libvirt where 'udevadm settle' will get stuck
in a loop until it eventually times out. Eventually we realized this
happens when we have any LXC containers active with veth devices in a
separate network namespace.

It is quite easy to reproduce the hang. In one terminal session start
a new network namespace:

  # unshare  --net /bin/sh
  sh-4.2# echo $$
  30718

Now in another terminal create a veth pair, and move one of the pair
into the network namespace:

  # ip link add name FOO type veth peer name BAR
  # ip link set FOO netns 30718

Now udevadm will hang:

  # udevadm settle

until it times out after 2 minutes.

Looking at the udevadm code I discovered that 

  udev_queue_get_queue_is_empty

will never return true if there is any veth device that has been moved
into a separate network namespace.

Adding some debugging I can see that the variable 'seqnum_udev' is
forever less than 'seqnum_kernel' in this scenario.

Any ideas on how to solve this problem with udevadm settle ?

Regards,
Daniel
-- 
|: http://berrange.com      -o-    http://www.flickr.com/photos/dberrange/ :|
|: http://libvirt.org              -o-             http://virt-manager.org :|
|: http://autobuild.org       -o-         http://search.cpan.org/~danberr/ :|
|: http://entangle-photo.org       -o-       http://live.gnome.org/gtk-vnc :|


More information about the systemd-devel mailing list