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

Reply via email to