[Bug 696435] Re: wait-for-root fails to detect nbd root
Dimitri John Ledkov
launchpad at surgut.co.uk
Mon Oct 16 15:54:48 UTC 2017
@jsalisbury that kernel is very nice, could you please cherrypick that
patch and include it in the next available/convenient src:linux SRU?
I have added the SRU template to the bug report.
** Description changed:
+ [Impact]
+ Kernel does not generate any events when ndb-client connects /dev/nbd0 devices, therefore it is impossible to monitor/react to the state of /dev/nbd0.
+
+ [Fix]
+ Generate change uevent when size of /dev/nbd0 changes
+
+ [Testcase]
+ * Start udevadm monitor
+ * modprobe nbd
+ * use ndb-client to connect something to /dev/nbd0
+ * observe that there are change udev events generated on /dev/nbd0 itself
+
+ [Regression Potential]
+ There is no change to existing uevents, or their ordering.
+ There is now an addition change event which will cause systemd to mark ndb devices as ready and trigger appropriate actions
+
+ [Original Bug Report]
+
When using an nbd root, wait-for-root blocks for 30 seconds before
booting continues successfully.
Using Ubuntu Natty, related packages versions:
- nbd-client 1:2.9.16-6ubuntu1
- initramfs-tools 0.98.1ubuntu9
+ nbd-client 1:2.9.16-6ubuntu1
+ initramfs-tools 0.98.1ubuntu9
The wait-for-root call from /usr/share/initramfs-tools/scripts/local:
- while [ -z "${FSTYPE}" ]; do
- FSTYPE=$(wait-for-root "${ROOT}" ${ROOTDELAY:-30})
+ while [ -z "${FSTYPE}" ]; do
+ FSTYPE=$(wait-for-root "${ROOT}" ${ROOTDELAY:-30})
- # Run failure hooks, hoping one of them can fix up the system
- # and we can restart the wait loop. If they all fail, abort
- # and move on to the panic handler and shell.
- if [ -z "${FSTYPE}" ] && ! try_failure_hooks; then
- break
- fi
- done
+ # Run failure hooks, hoping one of them can fix up the system
+ # and we can restart the wait loop. If they all fail, abort
+ # and move on to the panic handler and shell.
+ if [ -z "${FSTYPE}" ] && ! try_failure_hooks; then
+ break
+ fi
+ done
I replaced wait-for-root with a sh script that did `set >&2`, here are the relevant environment variables at the time wait-for-root was called:
ROOT='/dev/nbd0'
ROOTDELAY=''
ROOTFLAGS=''
ROOTFSTYPE=''
nbdroot='192.168.0.1,2011'
It's probably worth noting that "nbd0: unknown partition table" was
displayed asynchronously 1-2 seconds after wait-for-root was invoked and
while it was still waiting. But I tried adding a "sleep 5" as the last
line of local-top/nbd, so that the nbd message was displayed a lot
before wait-for-root was called, and it didn't make a difference. So I
don't think a race condition is involved in this problem.
Temporarily I'm passing rootdelay=1 in the kernel command line to work
around the problem.
--
You received this bug notification because you are a member of Ubuntu
Foundations Bugs, which is subscribed to systemd in Ubuntu.
https://bugs.launchpad.net/bugs/696435
Title:
wait-for-root fails to detect nbd root
Status in linux package in Ubuntu:
Fix Released
Status in nbd package in Ubuntu:
Invalid
Status in systemd package in Ubuntu:
Fix Released
Status in linux source package in Xenial:
In Progress
Status in systemd source package in Xenial:
Incomplete
Bug description:
[Impact]
Kernel does not generate any events when ndb-client connects /dev/nbd0 devices, therefore it is impossible to monitor/react to the state of /dev/nbd0.
[Fix]
Generate change uevent when size of /dev/nbd0 changes
[Testcase]
* Start udevadm monitor
* modprobe nbd
* use ndb-client to connect something to /dev/nbd0
* observe that there are change udev events generated on /dev/nbd0 itself
[Regression Potential]
There is no change to existing uevents, or their ordering.
There is now an addition change event which will cause systemd to mark ndb devices as ready and trigger appropriate actions
[Original Bug Report]
When using an nbd root, wait-for-root blocks for 30 seconds before
booting continues successfully.
Using Ubuntu Natty, related packages versions:
nbd-client 1:2.9.16-6ubuntu1
initramfs-tools 0.98.1ubuntu9
The wait-for-root call from /usr/share/initramfs-tools/scripts/local:
while [ -z "${FSTYPE}" ]; do
FSTYPE=$(wait-for-root "${ROOT}" ${ROOTDELAY:-30})
# Run failure hooks, hoping one of them can fix up the system
# and we can restart the wait loop. If they all fail, abort
# and move on to the panic handler and shell.
if [ -z "${FSTYPE}" ] && ! try_failure_hooks; then
break
fi
done
I replaced wait-for-root with a sh script that did `set >&2`, here are the relevant environment variables at the time wait-for-root was called:
ROOT='/dev/nbd0'
ROOTDELAY=''
ROOTFLAGS=''
ROOTFSTYPE=''
nbdroot='192.168.0.1,2011'
It's probably worth noting that "nbd0: unknown partition table" was
displayed asynchronously 1-2 seconds after wait-for-root was invoked
and while it was still waiting. But I tried adding a "sleep 5" as the
last line of local-top/nbd, so that the nbd message was displayed a
lot before wait-for-root was called, and it didn't make a difference.
So I don't think a race condition is involved in this problem.
Temporarily I'm passing rootdelay=1 in the kernel command line to work
around the problem.
To manage notifications about this bug go to:
https://bugs.launchpad.net/ubuntu/+source/linux/+bug/696435/+subscriptions
More information about the foundations-bugs
mailing list