USB2+umass: root mount fails
M. Warner Losh
imp at bsdimp.com
Mon Feb 16 18:03:32 PST 2009
In message: <6E9B5FF6-685B-427C-87A7-C95850DA5B6F at mac.com>
Marcel Moolenaar <xcllnt at mac.com> writes:
: On Feb 16, 2009, at 4:35 PM, M. Warner Losh wrote:
: > In message: <741FAA3B-B91A-4A23-B47F-21141A8D0B5D at mac.com>
: > Marcel Moolenaar <xcllnt at mac.com> writes:
: > :
: > : On Feb 16, 2009, at 3:13 PM, M. Warner Losh wrote:
: > :
: > : > In message: <ACB7DFF1-6C8E-4936-9BD9-BB2FD375F3BB at mac.com>
: > : > Marcel Moolenaar <xcllnt at mac.com> writes:
: > : > : Before I dig into the code, what's the current status of
: > : > : root mounts on USB mass storage devices?
: > : >
: > : > First, there's a kludge-o-round that is similar to your "sleep 10"
: > : > that you've added. It loops waiting for more devices to show up
: > if
: > : > the desired root file system hasn't appeared yet.
: > : >
: > : > There's no way for hot-plug busses to tell the kernel "I've
: > tried my
: > : > best to enumerate everything on my bus, and I'm done"
: > :
: > : Of course there is. Any and all USB hubs have a certain
: > : number of ports. You can trivially iterate over all of
: > : them and declare completion when you've tried them all.
: > The hot-plug busses know. The mountroot code doesn't have a way to
: > wait for the hot-plug busses.
: root_mount_hold() and root_mount_rel() are specifically
: designed to inform the mountroot code that it needs to
: wait (or that it should go ahead and mount root).
r145250 | phk | 2005-04-18 15:21:26 -0600 (Mon, 18 Apr 2005) | 12 lines
Add a named reference-count KPI to hold off mounting of the root filesystem.
While we wait for holds to be released, print a list of who holds us
back once per second.
Use the new KPI from GEOM instead of vfs_mount.c calling g_waitidle().
Use the new KPI also from ata.
With ATAmkIII's newbusification, ata could narrowly miss the window
and ad0 would not exist when we tried to mount root.
But it looks like the old usb code didn't call it either... I think
old code enumerated right away during boot, while the new code defers
the enumeration until events can be processed...
More information about the freebsd-usb