]> git.proxmox.com Git - mirror_ubuntu-eoan-kernel.git/commitdiff
mlxsw: spectrum_router: Propagate neighbour update errors
authorIdo Schimmel <idosch@mellanox.com>
Sun, 14 Apr 2019 18:57:47 +0000 (18:57 +0000)
committerDavid S. Miller <davem@davemloft.net>
Mon, 15 Apr 2019 20:29:20 +0000 (13:29 -0700)
Next patch will add offload indication to neighbours, but the indication
should only be altered in case the neighbour was successfully added to /
deleted from the device.

Propagate neighbour update errors, so that they could be taken into
account by the next patch.

Signed-off-by: Ido Schimmel <idosch@mellanox.com>
Acked-by: Jiri Pirko <jiri@mellanox.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/ethernet/mellanox/mlxsw/spectrum_router.c

index 5f05723011b4c7c6bcd7b4afa4cca66933a6fabe..e159b246ba55953d6677185d6f64039912e2a4e3 100644 (file)
@@ -2371,7 +2371,7 @@ static enum mlxsw_reg_rauht_op mlxsw_sp_rauht_op(bool adding)
                        MLXSW_REG_RAUHT_OP_WRITE_DELETE;
 }
 
-static void
+static int
 mlxsw_sp_router_neigh_entry_op4(struct mlxsw_sp *mlxsw_sp,
                                struct mlxsw_sp_neigh_entry *neigh_entry,
                                enum mlxsw_reg_rauht_op op)
@@ -2385,10 +2385,10 @@ mlxsw_sp_router_neigh_entry_op4(struct mlxsw_sp *mlxsw_sp,
        if (neigh_entry->counter_valid)
                mlxsw_reg_rauht_pack_counter(rauht_pl,
                                             neigh_entry->counter_index);
-       mlxsw_reg_write(mlxsw_sp->core, MLXSW_REG(rauht), rauht_pl);
+       return mlxsw_reg_write(mlxsw_sp->core, MLXSW_REG(rauht), rauht_pl);
 }
 
-static void
+static int
 mlxsw_sp_router_neigh_entry_op6(struct mlxsw_sp *mlxsw_sp,
                                struct mlxsw_sp_neigh_entry *neigh_entry,
                                enum mlxsw_reg_rauht_op op)
@@ -2402,7 +2402,7 @@ mlxsw_sp_router_neigh_entry_op6(struct mlxsw_sp *mlxsw_sp,
        if (neigh_entry->counter_valid)
                mlxsw_reg_rauht_pack_counter(rauht_pl,
                                             neigh_entry->counter_index);
-       mlxsw_reg_write(mlxsw_sp->core, MLXSW_REG(rauht), rauht_pl);
+       return mlxsw_reg_write(mlxsw_sp->core, MLXSW_REG(rauht), rauht_pl);
 }
 
 bool mlxsw_sp_neigh_ipv6_ignore(struct mlxsw_sp_neigh_entry *neigh_entry)
@@ -2424,17 +2424,24 @@ mlxsw_sp_neigh_entry_update(struct mlxsw_sp *mlxsw_sp,
                            struct mlxsw_sp_neigh_entry *neigh_entry,
                            bool adding)
 {
+       enum mlxsw_reg_rauht_op op = mlxsw_sp_rauht_op(adding);
+       int err;
+
        if (!adding && !neigh_entry->connected)
                return;
        neigh_entry->connected = adding;
        if (neigh_entry->key.n->tbl->family == AF_INET) {
-               mlxsw_sp_router_neigh_entry_op4(mlxsw_sp, neigh_entry,
-                                               mlxsw_sp_rauht_op(adding));
+               err = mlxsw_sp_router_neigh_entry_op4(mlxsw_sp, neigh_entry,
+                                                     op);
+               if (err)
+                       return;
        } else if (neigh_entry->key.n->tbl->family == AF_INET6) {
                if (mlxsw_sp_neigh_ipv6_ignore(neigh_entry))
                        return;
-               mlxsw_sp_router_neigh_entry_op6(mlxsw_sp, neigh_entry,
-                                               mlxsw_sp_rauht_op(adding));
+               err = mlxsw_sp_router_neigh_entry_op6(mlxsw_sp, neigh_entry,
+                                                     op);
+               if (err)
+                       return;
        } else {
                WARN_ON_ONCE(1);
        }