@@ -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:
Each skb segment needs a dst entry. Signed-off-by: Pravin B Shelar <pshelar@ovn.org> --- datapath/linux/compat/gso.c | 5 +++++ 1 file changed, 5 insertions(+)