[SENT 2004-03-17]

  Hello,

  so I finally upgraded from 2.4 to 2.6 (2.6.4), and one of the few
problems I've hit is hotplug. Basically, when I start up hotplug while
my Zaurus is plugged, everything works fine and usbnet gets loaded,
however when I plug Zaurus after hotplug was loaded, it trashes the
event.

  After populating the hotplug scripts with plethora of debug prints,
I've tracked it down to usb_convert_vars() - basically, immediatelly
after the USB device is plugged and the signal is already delivered to
hotplug, the sysfs tree isn't yet populated by all the relevant data
and only detach_state is present there - no bDeviceClass or so.

  Looking at drivers/usb/core/message.c:usb_set_configuration(),
device_add() is called first (which I suppose calls /sbin/hotplug
through platform_notify ?), and _then_ this set of files is created. It
doesn't look like there would be a lot of time to trigger the race, but
I personally get a _very_ high reproducibility rate (actually I'm not
sure if I ever managed not to trigger it).

  I don't know how to fix it in the kernel since we would probably need to
first add kobject, then pop out and create the sysfs nodes, and _then_ call the
userspace helper. So I just created a trivial bandaid for
/etc/hotplug/usb.agent, which fixes this for me:

--- hotplug-2004_03_11/etc/hotplug/usb.agent	Fri Mar 12 00:18:23 2004
+++ hotplug-2004_03_11+pasky/etc/hotplug/usb.agent	Wed Mar 17 00:17:47 2004
@@ -354,9 +354,14 @@
     # they happen to issue requests at the same time ... it happens easily
     # with slow HID devices and "usbmodules".
     # starting with 2.5 (DEVPATH set), all hcds must queue control traffic.
+
+    # However by the time of 2.6.4, the kernel has an easy-to-trigger (at
+    # least for me) race condition when /sbin/hotplug already got called but
+    # the sysfs device directory is not yet populated with all the neccessary
+    # files. --pasky
-    if [ "$DEVPATH" = "" ]; then
+    # if [ "$DEVPATH" = "" ]; then
 	sleep 3
-    fi
+    # fi
 
     usb_convert_vars
 

  Please consider applying.

  PS: By the way, usb.agent.(orig|rej) slipped into the 2004_03_11
distribution.
