X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=datapath%2Ftunnel.c;h=bd63da5555d849990d64e79ac9b2c35291cf9917;hb=82377f4d4ab6de76318f649190d0301f117b270e;hp=ef46a69de218f1b1991161d6a121438a5fb7bf29;hpb=a12945b3b8cd4d483e5e8f2a1adb6576badf1d4d;p=sliver-openvswitch.git diff --git a/datapath/tunnel.c b/datapath/tunnel.c index ef46a69de..bd63da555 100644 --- a/datapath/tunnel.c +++ b/datapath/tunnel.c @@ -144,6 +144,9 @@ static struct sk_buff *handle_offloads(struct sk_buff *skb) if (skb_is_gso(skb)) { struct sk_buff *nskb; + char cb[sizeof(skb->cb)]; + + memcpy(cb, skb->cb, sizeof(cb)); nskb = __skb_gso_segment(skb, 0, false); if (IS_ERR(nskb)) { @@ -153,6 +156,10 @@ static struct sk_buff *handle_offloads(struct sk_buff *skb) consume_skb(skb); skb = nskb; + while (nskb) { + memcpy(nskb->cb, cb, sizeof(cb)); + nskb = nskb->next; + } } else if (get_ip_summed(skb) == OVS_CSUM_PARTIAL) { /* Pages aren't locked and could change at any time. * If this happens after we compute the checksum, the