datapath: Always initialize fix_segment for GSO packet.
authorPravin B Shelar <pshelar@nicira.com>
Wed, 27 Aug 2014 14:24:44 +0000 (07:24 -0700)
committerPravin B Shelar <pshelar@nicira.com>
Fri, 29 Aug 2014 17:23:33 +0000 (10:23 -0700)
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 <pshelar@nicira.com>
Acked-by: Jesse Gross <jesse@nicira.com>
datapath/linux/compat/gre.c
datapath/linux/compat/gso.h

index 07b270a..8c133de 100644 (file)
@@ -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);
index 6281f29..20ec55c 100644 (file)
 
 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)