On Thu, Nov 08, 2018 at 05:12:50AM -0500, Chris Mi wrote:
> Currently, the ufid tc mapping is deleted in add_ufid_tc_mapping().
> But if tc_replace_flower() failed, the old ufid tc mapping will not
> be deleted. If another thread adds the same tc mapping successfully,
> then there will be multiple mappings for the same ifindex, handle
> and prio.
> 
> Fixes: 9116730db ("netdev-tc-offloads: Add ufid to tc/netdev map")
> Signed-off-by: Chris Mi <[email protected]>
> Reviewed-by: Roi Dayan <[email protected]>
> ---
>  lib/netdev-tc-offloads.c | 6 ++----
>  1 file changed, 2 insertions(+), 4 deletions(-)
> 
> diff --git a/lib/netdev-tc-offloads.c b/lib/netdev-tc-offloads.c
> index 6f1fbe6..27a40bf 100644
> --- a/lib/netdev-tc-offloads.c
> +++ b/lib/netdev-tc-offloads.c
> @@ -163,8 +163,7 @@ del_ufid_tc_mapping(const ovs_u128 *ufid)
>      ovs_mutex_unlock(&ufid_lock);
>  }
>  
> -/* Add ufid entry to ufid_tc hashmap.
> - * If entry exists already it will be replaced. */
> +/* Add ufid entry to ufid_tc hashmap. */
>  static void
>  add_ufid_tc_mapping(const ovs_u128 *ufid, int prio, int handle,
>                      struct netdev *netdev, int ifindex)
> @@ -173,8 +172,6 @@ add_ufid_tc_mapping(const ovs_u128 *ufid, int prio, int 
> handle,
>      size_t tc_hash = hash_int(hash_int(prio, handle), ifindex);
>      struct ufid_tc_data *new_data = xzalloc(sizeof *new_data);
>  
> -    del_ufid_tc_mapping(ufid);
> -
>      new_data->ufid = *ufid;
>      new_data->prio = prio;
>      new_data->handle = handle;
> @@ -1303,6 +1300,7 @@ netdev_tc_flow_put(struct netdev *netdev, struct match 
> *match,
>      if (handle && prio) {
>          VLOG_DBG_RL(&rl, "updating old handle: %d prio: %d", handle, prio);
>          tc_del_filter(ifindex, prio, handle, block_id);
> +        del_ufid_tc_mapping(ufid);
>      }
>  

Hi Chris,

Above the filter and then ufid mapping is deleted
while in netdev_tc_flow_del the order is reversed.

I wonder if we could make things more consistent using a wrapper
as it seems that in netdev-tc-offloads.c these two operations always occur
together.
_______________________________________________
dev mailing list
[email protected]
https://mail.openvswitch.org/mailman/listinfo/ovs-dev

Reply via email to