From: Pravin B Shelar Date: Wed, 27 Aug 2014 14:24:44 +0000 (-0700) Subject: datapath: Always initialize fix_segment for GSO packet. X-Git-Tag: v2.4.0~1556 X-Git-Url: http://git.cascardo.eti.br/?p=cascardo%2Fovs.git;a=commitdiff_plain;h=985998e8895345ea12a5cd6bfc413e363e5ffb60 datapath: Always initialize fix_segment for GSO packet. OVS tunnel compat code depends on this function pointer to handle GSO packet. Currently we do not initialize for all GRE GSO packets. Following patch fixes that. Signed-off-by: Pravin B Shelar Acked-by: Jesse Gross --- diff --git a/datapath/linux/compat/gre.c b/datapath/linux/compat/gre.c index 07b270a02..8c133dee4 100644 --- a/datapath/linux/compat/gre.c +++ b/datapath/linux/compat/gre.c @@ -292,6 +292,8 @@ struct sk_buff *gre_handle_offloads(struct sk_buff *skb, bool gre_csum) if (skb_is_gso(skb)) { if (gre_csum) OVS_GSO_CB(skb)->fix_segment = gre_csum_fix; + else + OVS_GSO_CB(skb)->fix_segment = NULL; } else { if (skb->ip_summed == CHECKSUM_PARTIAL && gre_csum) { err = skb_checksum_help(skb); diff --git a/datapath/linux/compat/gso.h b/datapath/linux/compat/gso.h index 6281f294c..20ec55cf0 100644 --- a/datapath/linux/compat/gso.h +++ b/datapath/linux/compat/gso.h @@ -12,13 +12,13 @@ struct ovs_gso_cb { struct ovs_skb_cb dp_cb; + void (*fix_segment)(struct sk_buff *); + sk_buff_data_t inner_mac_header; /* Offset from skb->head */ #if LINUX_VERSION_CODE < KERNEL_VERSION(3,11,0) __be16 inner_protocol; #endif u16 inner_network_header; /* Offset from * inner_mac_header */ - sk_buff_data_t inner_mac_header; /* Offset from skb->head */ - void (*fix_segment)(struct sk_buff *); }; #define OVS_GSO_CB(skb) ((struct ovs_gso_cb *)(skb)->cb)