[Bug 1215911] Re: wait-for-root fails to wait for plain /dev/sdaX partitions.

Tetsuo Handa 1215911 at bugs.launchpad.net
Mon Aug 26 12:59:56 UTC 2013


Thank you.

By the way, is there any possibility that "the message of a block device which
the wait-for-root is waiting for" cannot be received after ENOBUFS?

I think that any messages of block devices which are generated while the socket
buffer is full cannot be received using recvmsg(). I worry that "the message of
a block device which the wait-for-root is waiting for" is by chance generated
as one of such messages.

If such case occurs, waiting at udev_monitor_receive_device() will not return
"the message of a block device which the wait-for-root is waiting for", and
wait-for-root will uselessly waits until interrupted by SIGALRM. (The boot
would succeed anyway because the device file would have been created by the
time interrupted by SIGALRM. But really useless delay...)

-- 
You received this bug notification because you are a member of Ubuntu
Foundations Bugs, which is subscribed to initramfs-tools in Ubuntu.
https://bugs.launchpad.net/bugs/1215911

Title:
  wait-for-root fails to wait for plain /dev/sdaX partitions.

Status in “initramfs-tools” package in Ubuntu:
  Fix Released

Bug description:
  Moving the discussion from http://www.spinics.net/lists/hotplug/msg05769.html
  to launchpad, for I think that this bug needs to be handled in initramfs-tools
  package rather than in udev package.

  ----------

  I'm experiencing random boot failures with wait-for-root utility in Ubuntu
  12.04 ( ubuntu-12.04-server-amd64.iso ) on a HP ProLiant DL360p Gen8 server.

  For example, wait-for-root waited for only 0.13 seconds before giving
  up at

    FSTYPE=$(wait-for-root "${ROOT}" ${ROOTDELAY:-30})

  line in scripts/local in the initramfs, and  immediately enters into

    panic "ALERT!  ${ROOT} does not exist.  Dropping to a shell!"

  line.

  This is a race condition and manually entering "exit" from the panic prompt
  boots the system normally. This is a critical bug for this environment because
  it will randomly fail to perform unattended reboot (e.g. automatic reboot after
  saving kdump).

  ----------

  I examined main() in wait-for-root using debug fprintf() and it turned out that
  udev_monitor_receive_device() is sometimes immediately returning NULL (although
  wait-for-root is using blocking socket).

  I examined udev_monitor_receive_device() in libudev.so.0 using debug fprintf()
  and it turned out that recvmsg() in udev_monitor_receive_device() (which is in
  libudev-monitor.c in udev package) is returning ENOBUFS error before recvmsg()
  returns information of the root partition.

  The wait-for-root utility in initramfs-tools package is not expecting recvmsg()
  to return ENOBUFS error. But since ENOBUFS is an inevitable error, I think that
  wait-for-root (i.e. the caller of udev_monitor_receive_device()) should handle
  this error.

To manage notifications about this bug go to:
https://bugs.launchpad.net/ubuntu/+source/initramfs-tools/+bug/1215911/+subscriptions




More information about the foundations-bugs mailing list