diff options
author | Arnaldo Carvalho de Melo <acme@redhat.com> | 2007-03-10 10:47:22 -0500 |
---|---|---|
committer | David S. Miller <davem@sunset.davemloft.net> | 2007-04-26 01:24:38 -0400 |
commit | c51957dafa6f960c5c6372aa3da6c8fa71c13730 (patch) | |
tree | 674537df214b57e96660ffd59e2c44616c9ea57a | |
parent | 39f69c6f922fbfb51e1ff24c9e196584a79f1484 (diff) |
[TCP]: Do the layer header setting in tcp_collapse relative to skb->data
That is equal to skb->head before skb_reserve, to help in the layer header
changes.
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
-rw-r--r-- | net/ipv4/tcp_input.c | 8 |
1 files changed, 5 insertions, 3 deletions
diff --git a/net/ipv4/tcp_input.c b/net/ipv4/tcp_input.c index fb0256085948..e5d1c2c8cea7 100644 --- a/net/ipv4/tcp_input.c +++ b/net/ipv4/tcp_input.c | |||
@@ -3632,11 +3632,13 @@ tcp_collapse(struct sock *sk, struct sk_buff_head *list, | |||
3632 | nskb = alloc_skb(copy+header, GFP_ATOMIC); | 3632 | nskb = alloc_skb(copy+header, GFP_ATOMIC); |
3633 | if (!nskb) | 3633 | if (!nskb) |
3634 | return; | 3634 | return; |
3635 | |||
3636 | nskb->mac.raw = nskb->data + (skb->mac.raw - skb->head); | ||
3637 | nskb->nh.raw = nskb->data + (skb->nh.raw - skb->head); | ||
3638 | nskb->h.raw = nskb->data + (skb->h.raw - skb->head); | ||
3639 | |||
3635 | skb_reserve(nskb, header); | 3640 | skb_reserve(nskb, header); |
3636 | memcpy(nskb->head, skb->head, header); | 3641 | memcpy(nskb->head, skb->head, header); |
3637 | nskb->nh.raw = nskb->head + (skb->nh.raw-skb->head); | ||
3638 | nskb->h.raw = nskb->head + (skb->h.raw-skb->head); | ||
3639 | nskb->mac.raw = nskb->head + (skb->mac.raw-skb->head); | ||
3640 | memcpy(nskb->cb, skb->cb, sizeof(skb->cb)); | 3642 | memcpy(nskb->cb, skb->cb, sizeof(skb->cb)); |
3641 | TCP_SKB_CB(nskb)->seq = TCP_SKB_CB(nskb)->end_seq = start; | 3643 | TCP_SKB_CB(nskb)->seq = TCP_SKB_CB(nskb)->end_seq = start; |
3642 | __skb_insert(nskb, skb->prev, skb, list); | 3644 | __skb_insert(nskb, skb->prev, skb, list); |