Does unmasked_key also not memset to zero, like key? if yes, is there a possibility of mismatch when calling ovs_flow_cmp_unmasked_key?
On Sun, Jul 27, 2014 at 11:55 AM, Pravin B Shelar <pshe...@nicira.com> wrote: > Exact match flow lookup is always done under ovs lock. So use > ovsl_dereference() API for rcu access. > > Signed-off-by: Pravin B Shelar <pshe...@nicira.com> > --- > datapath/flow_table.c | 17 +++++++---------- > 1 file changed, 7 insertions(+), 10 deletions(-) > > diff --git a/datapath/flow_table.c b/datapath/flow_table.c > index 21f67bf..cfd5a84 100644 > --- a/datapath/flow_table.c > +++ b/datapath/flow_table.c > @@ -666,23 +666,20 @@ struct sw_flow *ovs_flow_tbl_lookup(struct flow_table > *tbl, > struct sw_flow *ovs_flow_tbl_lookup_exact(struct flow_table *tbl, > struct sw_flow_match *match) > { > - struct table_instance *ti = rcu_dereference_ovsl(tbl->ti); > - struct mask_array *ma = rcu_dereference_ovsl(tbl->mask_array); > - struct sw_flow *flow; > - u32 __always_unused n_mask_hit; > + struct mask_array *ma = ovsl_dereference(tbl->mask_array); > int i; > > /* Always called under ovs-mutex. */ > for (i = 0; i < ma->count; i++) { > + struct table_instance *ti = ovsl_dereference(tbl->ti); > + u32 __always_unused n_mask_hit; > struct sw_flow_mask *mask; > + struct sw_flow *flow; > > mask = ovsl_dereference(ma->masks[i]); > - if (mask) { > - flow = masked_flow_lookup(ti, match->key, mask, > &n_mask_hit); > - if (flow && ovs_flow_cmp_unmasked_key(flow, match)) { > /* Found */ > - return flow; > - } > - } > + flow = masked_flow_lookup(ti, match->key, mask, &n_mask_hit); > + if (flow && ovs_flow_cmp_unmasked_key(flow, match)) > + return flow; > } > return NULL; > } > -- > 1.9.3 > > _______________________________________________ > dev mailing list > dev@openvswitch.org > http://openvswitch.org/mailman/listinfo/dev _______________________________________________ dev mailing list dev@openvswitch.org http://openvswitch.org/mailman/listinfo/dev