[TCP]: Do the layer header setting in tcp_collapse relative to skb->data
authorArnaldo Carvalho de Melo <acme@redhat.com>
Sat, 10 Mar 2007 15:47:22 +0000 (12:47 -0300)
committerDavid S. Miller <davem@sunset.davemloft.net>
Thu, 26 Apr 2007 05:24:38 +0000 (22:24 -0700)
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>
net/ipv4/tcp_input.c

index fb0256085948eb709da3e37536db3c6bf2fbfea4..e5d1c2c8cea70ea2a4e6db12df4d3d03d033b7a0 100644 (file)
@@ -3632,11 +3632,13 @@ tcp_collapse(struct sock *sk, struct sk_buff_head *list,
                nskb = alloc_skb(copy+header, GFP_ATOMIC);
                if (!nskb)
                        return;
+
+               nskb->mac.raw = nskb->data + (skb->mac.raw - skb->head);
+               nskb->nh.raw = nskb->data + (skb->nh.raw - skb->head);
+               nskb->h.raw = nskb->data + (skb->h.raw - skb->head);
+
                skb_reserve(nskb, header);
                memcpy(nskb->head, skb->head, header);
-               nskb->nh.raw = nskb->head + (skb->nh.raw-skb->head);
-               nskb->h.raw = nskb->head + (skb->h.raw-skb->head);
-               nskb->mac.raw = nskb->head + (skb->mac.raw-skb->head);
                memcpy(nskb->cb, skb->cb, sizeof(skb->cb));
                TCP_SKB_CB(nskb)->seq = TCP_SKB_CB(nskb)->end_seq = start;
                __skb_insert(nskb, skb->prev, skb, list);