On packet recv OVS CB is initialized in multiple function. Following patch moves all these initialization to ovs_vport_receive(). This patch also save a check in execute actions.
Signed-off-by: Pravin B Shelar <pshe...@nicira.com> --- datapath/actions.c | 3 --- datapath/datapath.c | 6 ++---- datapath/datapath.h | 2 +- datapath/vport.c | 5 ++++- 4 files changed, 7 insertions(+), 9 deletions(-) diff --git a/datapath/actions.c b/datapath/actions.c index cb26ad5..1f12f55 100644 --- a/datapath/actions.c +++ b/datapath/actions.c @@ -811,9 +811,6 @@ int ovs_execute_actions(struct datapath *dp, struct sk_buff *skb, bool recirc) goto out_loop; } - if (!recirc) - ovs_skb_init_inner_protocol(skb); - OVS_CB(skb)->tun_info = NULL; error = do_execute_actions(dp, skb, acts->actions, acts->actions_len); diff --git a/datapath/datapath.c b/datapath/datapath.c index 4ec908e..e504fee 100644 --- a/datapath/datapath.c +++ b/datapath/datapath.c @@ -285,15 +285,13 @@ out: } /* Must be called with rcu_read_lock. */ -void ovs_dp_process_received_packet(struct vport *p, struct sk_buff *skb) +void ovs_dp_process_received_packet(struct sk_buff *skb) { int error; struct sw_flow_key key; - OVS_CB(skb)->input_vport = p; - /* Extract flow from 'skb' into 'key'. */ - error = ovs_flow_extract(skb, p->port_no, &key); + error = ovs_flow_extract(skb, OVS_CB(skb)->input_vport->port_no, &key); if (unlikely(error)) { kfree_skb(skb); return; diff --git a/datapath/datapath.h b/datapath/datapath.h index fcd8e86..d6dee50 100644 --- a/datapath/datapath.h +++ b/datapath/datapath.h @@ -189,7 +189,7 @@ extern struct notifier_block ovs_dp_device_notifier; extern struct genl_family dp_vport_genl_family; extern struct genl_multicast_group ovs_dp_vport_multicast_group; -void ovs_dp_process_received_packet(struct vport *, struct sk_buff *); +void ovs_dp_process_received_packet(struct sk_buff *); void ovs_dp_process_packet_with_key(struct sk_buff *, struct sw_flow_key *pkt_key, bool recirc); void ovs_dp_detach_port(struct vport *); diff --git a/datapath/vport.c b/datapath/vport.c index 02ccc89..897f221 100644 --- a/datapath/vport.c +++ b/datapath/vport.c @@ -32,6 +32,7 @@ #include <net/net_namespace.h> #include "datapath.h" +#include "gso.h" #include "vport.h" #include "vport-internal_dev.h" @@ -478,8 +479,10 @@ void ovs_vport_receive(struct vport *vport, struct sk_buff *skb, stats->rx_bytes += skb->len; u64_stats_update_end(&stats->syncp); + ovs_skb_init_inner_protocol(skb); OVS_CB(skb)->tun_info = tun_info; - ovs_dp_process_received_packet(vport, skb); + OVS_CB(skb)->input_vport = vport; + ovs_dp_process_received_packet(skb); } /** -- 1.9.3 _______________________________________________ dev mailing list dev@openvswitch.org http://openvswitch.org/mailman/listinfo/dev