USB: usb_wwan: fix race between write and resume
[pandora-kernel.git] / drivers / usb / serial / usb_wwan.c
index 47ad755..112693a 100644 (file)
@@ -660,17 +660,15 @@ int usb_wwan_resume(struct usb_serial *serial)
                }
        }
 
+       spin_lock_irq(&intfdata->susp_lock);
        for (i = 0; i < serial->num_ports; i++) {
                /* walk all ports */
                port = serial->port[i];
                portdata = usb_get_serial_port_data(port);
 
                /* skip closed ports */
-               spin_lock_irq(&intfdata->susp_lock);
-               if (!portdata || !portdata->opened) {
-                       spin_unlock_irq(&intfdata->susp_lock);
+               if (!portdata || !portdata->opened)
                        continue;
-               }
 
                for (j = 0; j < N_IN_URB; j++) {
                        urb = portdata->in_urbs[j];
@@ -683,9 +681,7 @@ int usb_wwan_resume(struct usb_serial *serial)
                        }
                }
                play_delayed(port);
-               spin_unlock_irq(&intfdata->susp_lock);
        }
-       spin_lock_irq(&intfdata->susp_lock);
        intfdata->suspended = 0;
        spin_unlock_irq(&intfdata->susp_lock);
 err_out: