ChangeSet 1.1043.1.24, 2003/02/18 15:52:11-08:00, [EMAIL PROTECTED]
[PATCH] USB: add "present" flag to usb_device structure.
This solves lots of races when drivers hold a reference to the usb_device
after the device is physically removed from the system (like when a user
has a open handle.) This now prevents any new urbs being submitted or
canceled for the device.
diff -Nru a/drivers/usb/core/urb.c b/drivers/usb/core/urb.c
--- a/drivers/usb/core/urb.c Tue Feb 18 16:37:09 2003
+++ b/drivers/usb/core/urb.c Tue Feb 18 16:37:09 2003
@@ -195,7 +195,7 @@
if (!urb || urb->hcpriv || !urb->complete)
return -EINVAL;
- if (!(dev = urb->dev) || !dev->bus || dev->devnum <= 0)
+ if (!(dev = urb->dev) || !dev->present || !dev->bus || dev->devnum <= 0)
return -ENODEV;
if (!(op = dev->bus->op) || !op->submit_urb)
return -ENODEV;
@@ -376,7 +376,7 @@
*/
int usb_unlink_urb(struct urb *urb)
{
- if (urb && urb->dev && urb->dev->bus && urb->dev->bus->op)
+ if (urb && urb->dev && urb->dev->present && urb->dev->bus && urb->dev->bus->op)
return urb->dev->bus->op->unlink_urb(urb);
else
return -ENODEV;
diff -Nru a/drivers/usb/core/usb.c b/drivers/usb/core/usb.c
--- a/drivers/usb/core/usb.c Tue Feb 18 16:37:09 2003
+++ b/drivers/usb/core/usb.c Tue Feb 18 16:37:09 2003
@@ -679,6 +679,7 @@
memset(dev, 0, sizeof(*dev));
device_initialize(&dev->dev);
+ dev->present = 1;
usb_bus_get(bus);
@@ -853,6 +854,10 @@
usbfs_remove_device(dev);
}
device_unregister(&dev->dev);
+
+ /* mark the device as not present so any further urb submissions for
+ * this device will fail. */
+ dev->present = 0;
/* Decrement the reference count, it'll auto free everything when */
/* it hits 0 which could very well be now */
diff -Nru a/include/linux/usb.h b/include/linux/usb.h
--- a/include/linux/usb.h Tue Feb 18 16:37:09 2003
+++ b/include/linux/usb.h Tue Feb 18 16:37:09 2003
@@ -239,6 +239,7 @@
int have_langid; /* whether string_langid is valid yet */
int string_langid; /* language ID for strings */
+ int present; /* if device is present or not */
void *hcpriv; /* Host Controller private data */
-------------------------------------------------------
This SF.net email is sponsored by: SlickEdit Inc. Develop an edge.
The most comprehensive and flexible code editor you can use.
Code faster. C/C++, C#, Java, HTML, XML, many more. FREE 30-Day Trial.
www.slickedit.com/sourceforge
_______________________________________________
[EMAIL PROTECTED]
To unsubscribe, use the last form field at:
https://lists.sourceforge.net/lists/listinfo/linux-usb-devel