diff options
Diffstat (limited to 'net/ipv4/tcp_output.c')
| -rw-r--r-- | net/ipv4/tcp_output.c | 12 |
1 files changed, 5 insertions, 7 deletions
diff --git a/net/ipv4/tcp_output.c b/net/ipv4/tcp_output.c index 743016baa048..f33c9dddaa12 100644 --- a/net/ipv4/tcp_output.c +++ b/net/ipv4/tcp_output.c | |||
| @@ -642,7 +642,7 @@ int tcp_fragment(struct sock *sk, struct sk_buff *skb, u32 len, unsigned int mss | |||
| 642 | * eventually). The difference is that pulled data not copied, but | 642 | * eventually). The difference is that pulled data not copied, but |
| 643 | * immediately discarded. | 643 | * immediately discarded. |
| 644 | */ | 644 | */ |
| 645 | static unsigned char *__pskb_trim_head(struct sk_buff *skb, int len) | 645 | static void __pskb_trim_head(struct sk_buff *skb, int len) |
| 646 | { | 646 | { |
| 647 | int i, k, eat; | 647 | int i, k, eat; |
| 648 | 648 | ||
| @@ -667,7 +667,6 @@ static unsigned char *__pskb_trim_head(struct sk_buff *skb, int len) | |||
| 667 | skb->tail = skb->data; | 667 | skb->tail = skb->data; |
| 668 | skb->data_len -= len; | 668 | skb->data_len -= len; |
| 669 | skb->len = skb->data_len; | 669 | skb->len = skb->data_len; |
| 670 | return skb->tail; | ||
| 671 | } | 670 | } |
| 672 | 671 | ||
| 673 | int tcp_trim_head(struct sock *sk, struct sk_buff *skb, u32 len) | 672 | int tcp_trim_head(struct sock *sk, struct sk_buff *skb, u32 len) |
| @@ -676,12 +675,11 @@ int tcp_trim_head(struct sock *sk, struct sk_buff *skb, u32 len) | |||
| 676 | pskb_expand_head(skb, 0, 0, GFP_ATOMIC)) | 675 | pskb_expand_head(skb, 0, 0, GFP_ATOMIC)) |
| 677 | return -ENOMEM; | 676 | return -ENOMEM; |
| 678 | 677 | ||
| 679 | if (len <= skb_headlen(skb)) { | 678 | /* If len == headlen, we avoid __skb_pull to preserve alignment. */ |
| 679 | if (unlikely(len < skb_headlen(skb))) | ||
| 680 | __skb_pull(skb, len); | 680 | __skb_pull(skb, len); |
| 681 | } else { | 681 | else |
| 682 | if (__pskb_trim_head(skb, len-skb_headlen(skb)) == NULL) | 682 | __pskb_trim_head(skb, len - skb_headlen(skb)); |
| 683 | return -ENOMEM; | ||
| 684 | } | ||
| 685 | 683 | ||
| 686 | TCP_SKB_CB(skb)->seq += len; | 684 | TCP_SKB_CB(skb)->seq += len; |
| 687 | skb->ip_summed = CHECKSUM_HW; | 685 | skb->ip_summed = CHECKSUM_HW; |
