hso: Fix URB submission -EINVAL.
authorDenis Joseph Barrow <D.Barow@option.com>
Tue, 25 Nov 2008 08:30:48 +0000 (00:30 -0800)
committerDavid S. Miller <davem@davemloft.net>
Tue, 25 Nov 2008 08:30:48 +0000 (00:30 -0800)
Added check for IFF_UP in hso_resume, this should eliminate -EINVAL (-22)
errors caused from urb's being submitted twice, once by hso_resume
& once in hso_net_open, if suspend/resume USB power saving  mode is enabled

Signed-off-by: Denis Joseph Barrow <D.Barow@option.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/usb/hso.c

index d5857321979bee719da9713f8cc5a88a1d47b3bb..2c172435495ffe37fc27e9334a504e08f146f119 100644 (file)
@@ -2762,18 +2762,21 @@ static int hso_resume(struct usb_interface *iface)
                if (network_table[i] &&
                    (network_table[i]->interface == iface)) {
                        hso_net = dev2net(network_table[i]);
-                       /* First transmit any lingering data, then restart the
-                        * device. */
-                       if (hso_net->skb_tx_buf) {
-                               dev_dbg(&iface->dev,
-                                       "Transmitting lingering data\n");
-                               hso_net_start_xmit(hso_net->skb_tx_buf,
-                                                  hso_net->net);
-                               hso_net->skb_tx_buf = NULL;
+                       if (hso_net->flags & IFF_UP) {
+                               /* First transmit any lingering data,
+                                  then restart the device. */
+                               if (hso_net->skb_tx_buf) {
+                                       dev_dbg(&iface->dev,
+                                               "Transmitting"
+                                               " lingering data\n");
+                                       hso_net_start_xmit(hso_net->skb_tx_buf,
+                                                          hso_net->net);
+                                       hso_net->skb_tx_buf = NULL;
+                               }
+                               result = hso_start_net_device(network_table[i]);
+                               if (result)
+                                       goto out;
                        }
-                       result = hso_start_net_device(network_table[i]);
-                       if (result)
-                               goto out;
                }
        }