mlxsw: spectrum_router: Don't check state when refreshing offload indication
Previous patch removed the reliance on the counter in the FIB info to set the offload indication, so we no longer need to keep an offload state on each FIB entry and can just set or unset the RTNH_F_OFFLOAD flag in each nexthop. This is also necessary because we're going to need to refresh the offload indication whenever the nexthop group associated with the FIB entry is refreshed. Current check would prevent us from marking a newly resolved nexthop as offloaded if the FIB entry is already marked as offloaded. Signed-off-by: Ido Schimmel <idosch@mellanox.com> Signed-off-by: Jiri Pirko <jiri@mellanox.com> Tested-by: David Ahern <dsahern@gmail.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
3984d1a89f
commit
1353ee7073
|
@ -394,7 +394,6 @@ struct mlxsw_sp_fib_entry {
|
||||||
enum mlxsw_sp_fib_entry_type type;
|
enum mlxsw_sp_fib_entry_type type;
|
||||||
struct list_head nexthop_group_node;
|
struct list_head nexthop_group_node;
|
||||||
struct mlxsw_sp_nexthop_group *nh_group;
|
struct mlxsw_sp_nexthop_group *nh_group;
|
||||||
bool offloaded;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
struct mlxsw_sp_fib4_entry {
|
struct mlxsw_sp_fib4_entry {
|
||||||
|
@ -2139,8 +2138,6 @@ mlxsw_sp_fib4_entry_offload_unset(struct mlxsw_sp_fib_entry *fib_entry)
|
||||||
|
|
||||||
static void mlxsw_sp_fib_entry_offload_set(struct mlxsw_sp_fib_entry *fib_entry)
|
static void mlxsw_sp_fib_entry_offload_set(struct mlxsw_sp_fib_entry *fib_entry)
|
||||||
{
|
{
|
||||||
fib_entry->offloaded = true;
|
|
||||||
|
|
||||||
switch (fib_entry->fib_node->fib->proto) {
|
switch (fib_entry->fib_node->fib->proto) {
|
||||||
case MLXSW_SP_L3_PROTO_IPV4:
|
case MLXSW_SP_L3_PROTO_IPV4:
|
||||||
mlxsw_sp_fib4_entry_offload_set(fib_entry);
|
mlxsw_sp_fib4_entry_offload_set(fib_entry);
|
||||||
|
@ -2160,8 +2157,6 @@ mlxsw_sp_fib_entry_offload_unset(struct mlxsw_sp_fib_entry *fib_entry)
|
||||||
case MLXSW_SP_L3_PROTO_IPV6:
|
case MLXSW_SP_L3_PROTO_IPV6:
|
||||||
WARN_ON_ONCE(1);
|
WARN_ON_ONCE(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
fib_entry->offloaded = false;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
@ -2170,17 +2165,13 @@ mlxsw_sp_fib_entry_offload_refresh(struct mlxsw_sp_fib_entry *fib_entry,
|
||||||
{
|
{
|
||||||
switch (op) {
|
switch (op) {
|
||||||
case MLXSW_REG_RALUE_OP_WRITE_DELETE:
|
case MLXSW_REG_RALUE_OP_WRITE_DELETE:
|
||||||
if (!fib_entry->offloaded)
|
|
||||||
return;
|
|
||||||
return mlxsw_sp_fib_entry_offload_unset(fib_entry);
|
return mlxsw_sp_fib_entry_offload_unset(fib_entry);
|
||||||
case MLXSW_REG_RALUE_OP_WRITE_WRITE:
|
case MLXSW_REG_RALUE_OP_WRITE_WRITE:
|
||||||
if (err)
|
if (err)
|
||||||
return;
|
return;
|
||||||
if (mlxsw_sp_fib_entry_should_offload(fib_entry) &&
|
if (mlxsw_sp_fib_entry_should_offload(fib_entry))
|
||||||
!fib_entry->offloaded)
|
|
||||||
mlxsw_sp_fib_entry_offload_set(fib_entry);
|
mlxsw_sp_fib_entry_offload_set(fib_entry);
|
||||||
else if (!mlxsw_sp_fib_entry_should_offload(fib_entry) &&
|
else if (!mlxsw_sp_fib_entry_should_offload(fib_entry))
|
||||||
fib_entry->offloaded)
|
|
||||||
mlxsw_sp_fib_entry_offload_unset(fib_entry);
|
mlxsw_sp_fib_entry_offload_unset(fib_entry);
|
||||||
return;
|
return;
|
||||||
default:
|
default:
|
||||||
|
|
Loading…
Reference in New Issue