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.
: 
: Huh?
: 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...

Warner


More information about the freebsd-usb mailing list