diff options
author | Linus Torvalds <torvalds@g5.osdl.org> | 2006-09-27 14:40:30 -0700 |
---|---|---|
committer | Linus Torvalds <torvalds@g5.osdl.org> | 2006-09-27 14:40:30 -0700 |
commit | 1f9bd4c96a8e918a86e083706e0d3eb7f030b9a3 (patch) | |
tree | a840b35ca8c193cb0ec5579de3fac4e4e7f47f11 /drivers/usb/net/net1080.c | |
parent | 00463c1633b6d6a2178d2dc794c0a70ac2f9ce6b (diff) | |
parent | 7f38aa0f04259d37f26e1e906607f1ebb39c0c5c (diff) |
Merge master.kernel.org:/pub/scm/linux/kernel/git/gregkh/usb-2.6
* master.kernel.org:/pub/scm/linux/kernel/git/gregkh/usb-2.6: (129 commits)
[PATCH] USB Storage: fix Rio Karma eject support build error
USB: Airprime driver improvements to allow full speed EvDO transfers
USB: remove OTG build warning
USB: EHCI update VIA workaround
USB: force root hub resume after power loss
USB: ohci_usb can oops on shutdown
USB: Dealias -110 code (more complete)
USB: Remove unneeded void * casts in core files
USB: u132-hcd: host controller driver for ELAN U132 adapter
USB: ftdi-elan: client driver for ELAN Uxxx adapters
usb serial: support Alcor Micro Corp. USB 2.0 TO RS-232 through pl2303 driver
USB: Moschip 7840 USB-Serial Driver
USB: add PlayStation 2 Trance Vibrator driver
USB: Add ADU support for Ontrak ADU devices
aircable: fix printk format warnings
Add AIRcable USB Bluetooth Dongle Driver
cypress_m8: implement graceful failure handling
cypress_m8: improve control endpoint error handling
cypress_m8: use usb_fill_int_urb where appropriate
cypress_m8: use appropriate URB polling interval
...
Diffstat (limited to 'drivers/usb/net/net1080.c')
-rw-r--r-- | drivers/usb/net/net1080.c | 15 |
1 files changed, 7 insertions, 8 deletions
diff --git a/drivers/usb/net/net1080.c b/drivers/usb/net/net1080.c index a9b6eeac3e3f..301baa72bac7 100644 --- a/drivers/usb/net/net1080.c +++ b/drivers/usb/net/net1080.c @@ -498,25 +498,24 @@ static int net1080_rx_fixup(struct usbnet *dev, struct sk_buff *skb) static struct sk_buff * net1080_tx_fixup(struct usbnet *dev, struct sk_buff *skb, gfp_t flags) { - int padlen; struct sk_buff *skb2; struct nc_header *header = NULL; struct nc_trailer *trailer = NULL; + int padlen = sizeof (struct nc_trailer); int len = skb->len; - padlen = ((len + sizeof (struct nc_header) - + sizeof (struct nc_trailer)) & 0x01) ? 0 : 1; + if (!((len + padlen + sizeof (struct nc_header)) & 0x01)) + padlen++; if (!skb_cloned(skb)) { int headroom = skb_headroom(skb); int tailroom = skb_tailroom(skb); - if ((padlen + sizeof (struct nc_trailer)) <= tailroom - && sizeof (struct nc_header) <= headroom) + if (padlen <= tailroom && + sizeof(struct nc_header) <= headroom) /* There's enough head and tail room */ goto encapsulate; - if ((sizeof (struct nc_header) + padlen - + sizeof (struct nc_trailer)) < + if ((sizeof (struct nc_header) + padlen) < (headroom + tailroom)) { /* There's enough total room, so just readjust */ skb->data = memmove(skb->head @@ -530,7 +529,7 @@ net1080_tx_fixup(struct usbnet *dev, struct sk_buff *skb, gfp_t flags) /* Create a new skb to use with the correct size */ skb2 = skb_copy_expand(skb, sizeof (struct nc_header), - sizeof (struct nc_trailer) + padlen, + padlen, flags); dev_kfree_skb_any(skb); if (!skb2) |