ovsdb-server: Fix a reference count leak bug
[cascardo/ovs.git] / datapath / actions.c
index 0d6375f..20413c9 100644 (file)
@@ -60,7 +60,7 @@ struct deferred_action {
 struct ovs_frag_data {
        unsigned long dst;
        struct vport *vport;
-       struct ovs_skb_cb cb;
+       struct ovs_gso_cb cb;
        __be16 inner_protocol;
        __u16 vlan_tci;
        __be16 vlan_proto;
@@ -68,7 +68,9 @@ struct ovs_frag_data {
        u8 l2_data[MAX_L2_LEN];
 };
 
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(3,10,0)
 static DEFINE_PER_CPU(struct ovs_frag_data, ovs_frag_data_storage);
+#endif
 
 #define DEFERRED_ACTION_FIFO_SIZE 10
 struct action_fifo {
@@ -623,7 +625,7 @@ static int set_sctp(struct sk_buff *skb, struct sw_flow_key *flow_key,
        return 0;
 }
 
-#if LINUX_VERSION_CODE > KERNEL_VERSION(3,9,0)
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(3,10,0)
 static int ovs_vport_output(OVS_VPORT_OUTPUT_PARAMS)
 {
        struct ovs_frag_data *data = get_pcpu_ptr(ovs_frag_data_storage);
@@ -635,7 +637,7 @@ static int ovs_vport_output(OVS_VPORT_OUTPUT_PARAMS)
        }
 
        __skb_dst_copy(skb, data->dst);
-       *OVS_CB(skb) = data->cb;
+       *OVS_GSO_CB(skb) = data->cb;
        ovs_skb_set_inner_protocol(skb, data->inner_protocol);
        skb->vlan_tci = data->vlan_tci;
        skb->vlan_proto = data->vlan_proto;
@@ -672,7 +674,7 @@ static void prepare_frag(struct vport *vport, struct sk_buff *skb)
        data = get_pcpu_ptr(ovs_frag_data_storage);
        data->dst = (unsigned long) skb_dst(skb);
        data->vport = vport;
-       data->cb = *OVS_CB(skb);
+       data->cb = *OVS_GSO_CB(skb);
        data->inner_protocol = ovs_skb_get_inner_protocol(skb);
        data->vlan_tci = skb->vlan_tci;
        data->vlan_proto = skb->vlan_proto;
@@ -738,7 +740,7 @@ static void ovs_fragment(struct vport *vport, struct sk_buff *skb, u16 mru,
 err:
        kfree_skb(skb);
 }
-#else /* <= 3.9 */
+#else /* < 3.10 */
 static void ovs_fragment(struct vport *vport, struct sk_buff *skb, u16 mru,
                         __be16 ethertype)
 {