diff options
Diffstat (limited to 'drivers/net/can/usb/gs_usb.c')
| -rw-r--r-- | drivers/net/can/usb/gs_usb.c | 12 | 
1 files changed, 7 insertions, 5 deletions
| diff --git a/drivers/net/can/usb/gs_usb.c b/drivers/net/can/usb/gs_usb.c index 1b400de00f51..b487e3fe770a 100644 --- a/drivers/net/can/usb/gs_usb.c +++ b/drivers/net/can/usb/gs_usb.c @@ -321,7 +321,7 @@ static void gs_usb_receive_bulk_callback(struct urb *urb)  	/* device reports out of range channel id */  	if (hf->channel >= GS_MAX_INTF) -		goto resubmit_urb; +		goto device_detach;  	dev = usbcan->canch[hf->channel]; @@ -357,9 +357,6 @@ static void gs_usb_receive_bulk_callback(struct urb *urb)  			goto resubmit_urb;  		} -		netdev->stats.tx_packets++; -		netdev->stats.tx_bytes += hf->can_dlc; -  		txc = gs_get_tx_context(dev, hf->echo_id);  		/* bad devices send bad echo_ids. */ @@ -370,7 +367,9 @@ static void gs_usb_receive_bulk_callback(struct urb *urb)  			goto resubmit_urb;  		} -		can_get_echo_skb(netdev, hf->echo_id, NULL); +		netdev->stats.tx_packets++; +		netdev->stats.tx_bytes += can_get_echo_skb(netdev, hf->echo_id, +							   NULL);  		gs_free_tx_context(txc); @@ -406,6 +405,7 @@ static void gs_usb_receive_bulk_callback(struct urb *urb)  	/* USB failure take down all interfaces */  	if (rc == -ENODEV) { + device_detach:  		for (rc = 0; rc < GS_MAX_INTF; rc++) {  			if (usbcan->canch[rc])  				netif_device_detach(usbcan->canch[rc]->netdev); @@ -507,6 +507,8 @@ static netdev_tx_t gs_can_start_xmit(struct sk_buff *skb,  	hf->echo_id = idx;  	hf->channel = dev->channel; +	hf->flags = 0; +	hf->reserved = 0;  	cf = (struct can_frame *)skb->data; |