diff options
author | Jiri Kosina <jkosina@suse.cz> | 2010-09-24 14:03:37 +0200 |
---|---|---|
committer | Jiri Kosina <jkosina@suse.cz> | 2010-09-24 14:03:37 +0200 |
commit | 73e6d6c6467771838c1fc6949e6768a12ed72464 (patch) | |
tree | 94dd60891869a0a275cd332c4e675cf0b101fcfa /net/core/skbuff.c | |
parent | 12e5272585901217e919da810c801e5084ee0cb1 (diff) | |
parent | a850ea30374ebed32a0724742601861853fde869 (diff) |
Merge branch 'master' into upstream
Diffstat (limited to 'net/core/skbuff.c')
-rw-r--r-- | net/core/skbuff.c | 6 |
1 files changed, 5 insertions, 1 deletions
diff --git a/net/core/skbuff.c b/net/core/skbuff.c index 3a2513f0d0c3..c83b421341c0 100644 --- a/net/core/skbuff.c +++ b/net/core/skbuff.c @@ -2573,6 +2573,10 @@ struct sk_buff *skb_segment(struct sk_buff *skb, int features) __copy_skb_header(nskb, skb); nskb->mac_len = skb->mac_len; + /* nskb and skb might have different headroom */ + if (nskb->ip_summed == CHECKSUM_PARTIAL) + nskb->csum_start += skb_headroom(nskb) - headroom; + skb_reset_mac_header(nskb); skb_set_network_header(nskb, skb->mac_len); nskb->transport_header = (nskb->network_header + @@ -2703,7 +2707,7 @@ int skb_gro_receive(struct sk_buff **head, struct sk_buff *skb) return -E2BIG; headroom = skb_headroom(p); - nskb = netdev_alloc_skb(p->dev, headroom + skb_gro_offset(p)); + nskb = alloc_skb(headroom + skb_gro_offset(p), GFP_ATOMIC); if (unlikely(!nskb)) return -ENOMEM; |