Commit 1353ee70 authored by Ido Schimmel's avatar Ido Schimmel Committed by David S. Miller

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: default avatarIdo Schimmel <idosch@mellanox.com>
Signed-off-by: default avatarJiri Pirko <jiri@mellanox.com>
Tested-by: default avatarDavid Ahern <dsahern@gmail.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 3984d1a8
...@@ -394,7 +394,6 @@ struct mlxsw_sp_fib_entry { ...@@ -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) ...@@ -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) ...@@ -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, ...@@ -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:
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment