diff options
Diffstat (limited to 'drivers/net/usb/usbnet.c')
| -rw-r--r-- | drivers/net/usb/usbnet.c | 16 | 
1 files changed, 10 insertions, 6 deletions
diff --git a/drivers/net/usb/usbnet.c b/drivers/net/usb/usbnet.c index 17b6a62d206e..a95c73de5824 100644 --- a/drivers/net/usb/usbnet.c +++ b/drivers/net/usb/usbnet.c @@ -43,6 +43,7 @@  #include <linux/mii.h>  #include <linux/usb.h>  #include <linux/usb/usbnet.h> +#include <linux/slab.h>  #define DRIVER_VERSION		"22-Aug-2005" @@ -1068,12 +1069,15 @@ netdev_tx_t usbnet_start_xmit (struct sk_buff *skb,  	 * NOTE:  strictly conforming cdc-ether devices should expect  	 * the ZLP here, but ignore the one-byte packet.  	 */ -	if (!(info->flags & FLAG_SEND_ZLP) && (length % dev->maxpacket) == 0) { -		urb->transfer_buffer_length++; -		if (skb_tailroom(skb)) { -			skb->data[skb->len] = 0; -			__skb_put(skb, 1); -		} +	if (length % dev->maxpacket == 0) { +		if (!(info->flags & FLAG_SEND_ZLP)) { +			urb->transfer_buffer_length++; +			if (skb_tailroom(skb)) { +				skb->data[skb->len] = 0; +				__skb_put(skb, 1); +			} +		} else +			urb->transfer_flags |= URB_ZERO_PACKET;  	}  	spin_lock_irqsave(&dev->txq.lock, flags);  | 
