[ovs-dev] [PATCH 02/24] datapath: tnl-segmentation: clone dst for each segment.

Pravin B Shelar pshelar at ovn.org
Wed Jul 13 05:23:53 UTC 2016


Each skb segment needs a dst entry.

Signed-off-by: Pravin B Shelar <pshelar at ovn.org>
---
 datapath/linux/compat/gso.c | 5 +++++
 1 file changed, 5 insertions(+)

diff --git a/datapath/linux/compat/gso.c b/datapath/linux/compat/gso.c
index 8812253..9d478f8 100644
--- a/datapath/linux/compat/gso.c
+++ b/datapath/linux/compat/gso.c
@@ -189,6 +189,7 @@ static struct sk_buff *tnl_skb_gso_segment(struct sk_buff *skb,
 	int outer_l3_offset = skb_network_offset(skb);
 	int outer_l4_offset = skb_transport_offset(skb);
 	struct sk_buff *skb1 = skb;
+	struct dst_entry *dst = skb_dst(skb);
 	struct sk_buff *segs;
 	__be16 proto = skb->protocol;
 	char cb[sizeof(skb->cb)];
@@ -235,6 +236,10 @@ static struct sk_buff *tnl_skb_gso_segment(struct sk_buff *skb,
 		OVS_GSO_CB(skb)->fix_segment(skb);
 
 		skb->protocol = proto;
+		if (skb->next)
+			dst = dst_clone(dst);
+
+		skb_dst_set(skb, dst);
 		skb = skb->next;
 	}
 free:
-- 
1.9.1




More information about the dev mailing list