mlxsw: spectrum: Fix refcount bug on span entries
When binding port to a newly created span entry, its refcount is
initialized to zero even though it has a bound port. That leads
to unexpected behaviour when the user tries to delete that port
from the span entry.
Fix this by initializing the reference count to 1.
Also add a warning to put function.
Fixes: 763b4b70af
("mlxsw: spectrum: Add support in matchall mirror TC offloading")
Signed-off-by: Yotam Gigi <yotamg@mellanox.com>
Reviewed-by: Ido Schimmel <idosch@mellanox.com>
Signed-off-by: Jiri Pirko <jiri@mellanox.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
a055450a33
commit
2d644d4c75
|
@ -231,7 +231,7 @@ mlxsw_sp_span_entry_create(struct mlxsw_sp_port *port)
|
|||
|
||||
span_entry->used = true;
|
||||
span_entry->id = index;
|
||||
span_entry->ref_count = 0;
|
||||
span_entry->ref_count = 1;
|
||||
span_entry->local_port = local_port;
|
||||
return span_entry;
|
||||
}
|
||||
|
@ -270,6 +270,7 @@ static struct mlxsw_sp_span_entry
|
|||
|
||||
span_entry = mlxsw_sp_span_entry_find(port);
|
||||
if (span_entry) {
|
||||
/* Already exists, just take a reference */
|
||||
span_entry->ref_count++;
|
||||
return span_entry;
|
||||
}
|
||||
|
@ -280,6 +281,7 @@ static struct mlxsw_sp_span_entry
|
|||
static int mlxsw_sp_span_entry_put(struct mlxsw_sp *mlxsw_sp,
|
||||
struct mlxsw_sp_span_entry *span_entry)
|
||||
{
|
||||
WARN_ON(!span_entry->ref_count);
|
||||
if (--span_entry->ref_count == 0)
|
||||
mlxsw_sp_span_entry_destroy(mlxsw_sp, span_entry);
|
||||
return 0;
|
||||
|
|
Loading…
Reference in New Issue