@@ -140,7 +140,6 @@ struct ipheth_device {
140140 struct usb_device * udev ;
141141 struct usb_interface * intf ;
142142 struct net_device * net ;
143- struct sk_buff * tx_skb ;
144143 struct urb * tx_urb ;
145144 struct urb * rx_urb ;
146145 unsigned char * tx_buf ;
@@ -229,6 +228,7 @@ static void ipheth_rcvbulk_callback(struct urb *urb)
229228 case - ENOENT :
230229 case - ECONNRESET :
231230 case - ESHUTDOWN :
231+ case - EPROTO :
232232 return ;
233233 case 0 :
234234 break ;
@@ -280,7 +280,6 @@ static void ipheth_sndbulk_callback(struct urb *urb)
280280 dev_err (& dev -> intf -> dev , "%s: urb status: %d\n" ,
281281 __func__ , status );
282282
283- dev_kfree_skb_irq (dev -> tx_skb );
284283 netif_wake_queue (dev -> net );
285284}
286285
@@ -410,7 +409,7 @@ static int ipheth_tx(struct sk_buff *skb, struct net_device *net)
410409 if (skb -> len > IPHETH_BUF_SIZE ) {
411410 WARN (1 , "%s: skb too large: %d bytes\n" , __func__ , skb -> len );
412411 dev -> net -> stats .tx_dropped ++ ;
413- dev_kfree_skb_irq (skb );
412+ dev_kfree_skb_any (skb );
414413 return NETDEV_TX_OK ;
415414 }
416415
@@ -430,12 +429,11 @@ static int ipheth_tx(struct sk_buff *skb, struct net_device *net)
430429 dev_err (& dev -> intf -> dev , "%s: usb_submit_urb: %d\n" ,
431430 __func__ , retval );
432431 dev -> net -> stats .tx_errors ++ ;
433- dev_kfree_skb_irq (skb );
432+ dev_kfree_skb_any (skb );
434433 } else {
435- dev -> tx_skb = skb ;
436-
437434 dev -> net -> stats .tx_packets ++ ;
438435 dev -> net -> stats .tx_bytes += skb -> len ;
436+ dev_consume_skb_any (skb );
439437 netif_stop_queue (net );
440438 }
441439
0 commit comments