net/mlx5: Fix multiple updates of steering rules in parallel
authorEli Britstein <elibr@mellanox.com>
Thu, 31 Jan 2019 12:56:01 +0000 (14:56 +0200)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Mon, 27 Jan 2020 13:50:31 +0000 (14:50 +0100)
[ Upstream commit 6237634d8fcc65c9e3348382910e7cdb15084c68 ]

There might be a condition where the fte found is not active yet. In
this case we should not use it, but continue to search for another, or
allocate a new one.

Fixes: bd71b08ec2ee ("net/mlx5: Support multiple updates of steering rules in parallel")
Signed-off-by: Eli Britstein <elibr@mellanox.com>
Reviewed-by: Maor Gottlieb <maorg@mellanox.com>
Signed-off-by: Saeed Mahameed <saeedm@mellanox.com>
Signed-off-by: Sasha Levin <sashal@kernel.org>
drivers/net/ethernet/mellanox/mlx5/core/fs_core.c

index 82a5331..b16e0f4 100644 (file)
@@ -469,6 +469,7 @@ static void del_hw_fte(struct fs_node *node)
                        mlx5_core_warn(dev,
                                       "flow steering can't delete fte in index %d of flow group id %d\n",
                                       fte->index, fg->id);
+               node->active = 0;
        }
 }
 
@@ -1597,6 +1598,11 @@ lookup_fte_locked(struct mlx5_flow_group *g,
                fte_tmp = NULL;
                goto out;
        }
+       if (!fte_tmp->node.active) {
+               tree_put_node(&fte_tmp->node);
+               fte_tmp = NULL;
+               goto out;
+       }
 
        nested_down_write_ref_node(&fte_tmp->node, FS_LOCK_CHILD);
 out: