--- local_tree.orig/drivers/usb/core/devio.c    2004-07-26 00:12:27.375116209 +0200
+++ local_tree/drivers/usb/core/devio.c 2004-07-26 00:17:25.499847408 +0200
@@ -1064,6 +1064,11 @@
        struct usb_device *dev = ps->dev;
        int ret;
 
+       down(&dev->serialize);
+       if (!connected(dev)) {
+               ret = -ENODEV;
+               goto fail;
+       }
        add_wait_queue(&ps->wait, &wait);
        while (connected(dev)) {
                __set_current_state(TASK_INTERRUPTIBLE);
@@ -1077,19 +1082,20 @@
        }
        remove_wait_queue(&ps->wait, &wait);
        set_current_state(TASK_RUNNING);
-       if (as) {
-               ret = processcompl(as);
-               addr = as->userurb;
-               free_async(as);
-               if (ret)
-                       return ret;
-               if (put_user(addr, (void __user * __user *)arg))
-                       return -EFAULT;
-               return 0;
+       if (!as) {
+               ret = signal_pending(current) ? -EINTR : -EIO;
+               goto fail;
        }
-       if (signal_pending(current))
-               return -EINTR;
-       return -EIO;
+       ret = processcompl(as);
+       addr = as->userurb;
+       free_async(as);
+       if (ret)
+               goto fail;
+       up(&dev->serialize);
+       return put_user(addr, (void __user * __user *)arg) ? -EFAULT : 0;
+fail:
+       up(&dev->serialize);
+       return ret;
 }
 
 static int proc_reapurbnonblock(struct dev_state *ps, void __user *arg)
@@ -1325,14 +1331,8 @@
                break;
 
        case USBDEVFS_REAPURB:
-               down(&dev->serialize);
-               if (!connected(dev)) {
-                       up(&dev->serialize);
-                       return -ENODEV;
-               }
                snoop(&dev->dev, "%s: REAPURB\n", __FUNCTION__);
                ret = proc_reapurb(ps, p);
-               up(&dev->serialize);
                break;
 
        case USBDEVFS_REAPURBNDELAY:


-------------------------------------------------------
This SF.Net email is sponsored by OSTG. Have you noticed the changes on
Linux.com, ITManagersJournal and NewsForge in the past few weeks? Now,
one more big change to announce. We are now OSTG- Open Source Technology
Group. Come see the changes on the new OSTG site. www.ostg.com
_______________________________________________
[EMAIL PROTECTED]
To unsubscribe, use the last form field at:
https://lists.sourceforge.net/lists/listinfo/linux-usb-devel

Reply via email to