diff options
author | Roi Dayan <roid@mellanox.com> | 2019-12-02 18:19:47 +0100 |
---|---|---|
committer | Saeed Mahameed <saeedm@mellanox.com> | 2019-12-05 22:02:12 +0100 |
commit | eb252c3a24fc5856fa62140c2f8269ddce6ce4e5 (patch) | |
tree | c0420f8b98038d28c1dd5517ff88ab4c735af8ba /drivers/net/ethernet | |
parent | net/mlx5e: Fix freeing flow with kfree() and not kvfree() (diff) | |
download | linux-eb252c3a24fc5856fa62140c2f8269ddce6ce4e5.tar.xz linux-eb252c3a24fc5856fa62140c2f8269ddce6ce4e5.zip |
net/mlx5e: Fix free peer_flow when refcount is 0
It could be neigh update flow took a refcount on peer flow so
sometimes we cannot release peer flow even if parent flow is
being freed now.
Fixes: 5a7e5bcb663d ("net/mlx5e: Extend tc flow struct with reference counter")
Signed-off-by: Roi Dayan <roid@mellanox.com>
Reviewed-by: Eli Britstein <elibr@mellanox.com>
Signed-off-by: Saeed Mahameed <saeedm@mellanox.com>
Diffstat (limited to 'drivers/net/ethernet')
-rw-r--r-- | drivers/net/ethernet/mellanox/mlx5/core/en_tc.c | 7 |
1 files changed, 5 insertions, 2 deletions
diff --git a/drivers/net/ethernet/mellanox/mlx5/core/en_tc.c b/drivers/net/ethernet/mellanox/mlx5/core/en_tc.c index 704f892b321f..9b32a9c0f497 100644 --- a/drivers/net/ethernet/mellanox/mlx5/core/en_tc.c +++ b/drivers/net/ethernet/mellanox/mlx5/core/en_tc.c @@ -1626,8 +1626,11 @@ static void __mlx5e_tc_del_fdb_peer_flow(struct mlx5e_tc_flow *flow) flow_flag_clear(flow, DUP); - mlx5e_tc_del_fdb_flow(flow->peer_flow->priv, flow->peer_flow); - kfree(flow->peer_flow); + if (refcount_dec_and_test(&flow->peer_flow->refcnt)) { + mlx5e_tc_del_fdb_flow(flow->peer_flow->priv, flow->peer_flow); + kfree(flow->peer_flow); + } + flow->peer_flow = NULL; } |