diff options
author | dave rientjes <rientjes@google.com> | 2006-07-18 23:23:02 -0700 |
---|---|---|
committer | Greg Kroah-Hartman <gregkh@suse.de> | 2006-09-27 11:58:54 -0700 |
commit | 9bcbcf4d00cd2400e655a738e77f0d21b69c6771 (patch) | |
tree | 2ef039b8fd9967c9de2ef06cee17b6b8e7e00e80 /drivers | |
parent | 5482687b8be4dedb8a5879f07c734ff11a88a7d5 (diff) | |
download | op-kernel-dev-9bcbcf4d00cd2400e655a738e77f0d21b69c6771.zip op-kernel-dev-9bcbcf4d00cd2400e655a738e77f0d21b69c6771.tar.gz |
USB: net1080 inherent pad length
The size of struct nc_trailer is inherently the newtailroom pad.
Signed-off-by: David Rientjes <rientjes@google.com>
Cc: David Brownell <david-b@pacbell.net>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
Diffstat (limited to 'drivers')
-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 a9b6eea..301baa7 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) |