patch-2.4.19 linux-2.4.19/drivers/usb/devio.c
Next file: linux-2.4.19/drivers/usb/emi26.c
Previous file: linux-2.4.19/drivers/usb/devices.c
Back to the patch index
Back to the overall index
-  Lines: 32
-  Date:
Fri Aug  2 17:39:44 2002
-  Orig file: 
linux-2.4.18/drivers/usb/devio.c
-  Orig date: 
Fri Nov  2 17:18:58 2001
diff -urN linux-2.4.18/drivers/usb/devio.c linux-2.4.19/drivers/usb/devio.c
@@ -286,7 +286,9 @@
 }
 
 /*
- * interface claiming
+ * interface claims are made only at the request of user level code,
+ * which can also release them (explicitly or by closing files).
+ * they're also undone when devices disconnect.
  */
 
 static void *driver_probe(struct usb_device *dev, unsigned int intf,
@@ -299,7 +301,20 @@
 {
 	struct dev_state *ps = (struct dev_state *)context;
 
+	if (!ps)
+		return;
+
+	/* this waits till synchronous requests complete */
+	down_write (&ps->devsem);
+
+	/* prevent new I/O requests */
+	ps->dev = 0;
 	ps->ifclaimed = 0;
+
+	/* force async requests to complete */
+	destroy_all_async (ps);
+
+	up_write (&ps->devsem);
 }
 
 struct usb_driver usbdevfs_driver = {
FUNET's LINUX-ADM group, linux-adm@nic.funet.fi
TCL-scripts by Sam Shen (who was at: slshen@lbl.gov)