On Mon, 4 May 2009 11:07:52 -0400 (EDT) Alan Stern <stern@xxxxxxxxxxxxxxxxxxx> wrote: > On Mon, 4 May 2009, Arjan van de Ven wrote: > > > > > for normal device probing we already have infrastructure > > > > though... wait_for_device_probe, driver_probe_done and > > > > friends... (the scsi scanning thread is being converted to the > > > > async infrastructure btw) > > > > > > > > do we need to invent more ? > > > > > > I suppose the usb-storage scanning thread could also be converted > > > to the async infrastructure, although I haven't heard of anybody > > > working on it. > > > > > > But the USB hub driver's thread (khubd) cannot be converted. It > > > is central to the discovery of USB-based block devices. How > > > would you handle that? > > > > take a ref in the driver_probe_done() sense, and release it when you > > know you're done probing.... > > > > at that point all existing infrastructure will just work. > > Isn't there still something missing? The wait_for_device_probe() > routine would wait until all attached devices had been probed. But > why should prepare_namespace() have to wait that long? Wouldn't it be > better to wait only until the root device has been registered? Yes, maybe David should merge the following patch into the patch No.5(initdev:kernel: USB and SCSI block init device notification, v3). Right? diff --git a/init/do_mounts.c b/init/do_mounts.c index dd7ee5f..22fd773 100644 --- a/init/do_mounts.c +++ b/init/do_mounts.c @@ -358,6 +358,12 @@ void __init mount_root(void) #endif } +static int root_dev_done() +{ + return !!(ROOT_DEV = name_to_dev_t(saved_root_name)); +} + + /* * Prepare the namespace - decide what/where to mount, load ramdisks, etc. */ @@ -398,12 +404,12 @@ void __init prepare_namespace(void) goto out; /* wait for any asynchronous scanning to complete */ - if ((ROOT_DEV == 0) && root_wait) { + if (ROOT_DEV == 0 && root_wait) { printk(KERN_INFO "Waiting for root device %s...\n", saved_root_name); - while (driver_probe_done() != 0 || - (ROOT_DEV = name_to_dev_t(saved_root_name)) == 0) - msleep(100); + do { + initdev_wait(BOOTDEV_BLOCK, root_dev_done); + } while (!ROOT_DEV); async_synchronize_full(); } -- Lei Ming -- To unsubscribe from this list: send the line "unsubscribe linux-scsi" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html