aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorYuval Mintz <yuvalm@mellanox.com>2018-01-24 04:02:09 -0500
committerDavid S. Miller <davem@davemloft.net>2018-01-24 10:58:22 -0500
commit1ecdaea02ca6bfacf2ecda500dc1af51e9780c42 (patch)
tree47412becb3e85b22d2801a855ff9037bde9b8a00
parent97edf7c526c117f95ab9ea311f6ac4a46a1f7459 (diff)
mlxsw: spectrum_router: Don't log an error on missing neighbor
Driver periodically samples all neighbors configured in device in order to update the kernel regarding their state. When finding an entry configured in HW that doesn't show in neigh_lookup() driver logs an error message. This introduces a race when removing multiple neighbors - it's possible that a given entry would still be configured in HW as its removal is still being processed but is already removed from the kernel's neighbor tables. Simply remove the error message and gracefully accept such events. Fixes: c723c735fa6b ("mlxsw: spectrum_router: Periodically update the kernel's neigh table") Fixes: 60f040ca11b9 ("mlxsw: spectrum_router: Periodically dump active IPv6 neighbours") Signed-off-by: Yuval Mintz <yuvalm@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>
-rw-r--r--drivers/net/ethernet/mellanox/mlxsw/spectrum_router.c10
1 files changed, 2 insertions, 8 deletions
diff --git a/drivers/net/ethernet/mellanox/mlxsw/spectrum_router.c b/drivers/net/ethernet/mellanox/mlxsw/spectrum_router.c
index 6c0391c13fe0..7042c855a5d6 100644
--- a/drivers/net/ethernet/mellanox/mlxsw/spectrum_router.c
+++ b/drivers/net/ethernet/mellanox/mlxsw/spectrum_router.c
@@ -1942,11 +1942,8 @@ static void mlxsw_sp_router_neigh_ent_ipv4_process(struct mlxsw_sp *mlxsw_sp,
1942 dipn = htonl(dip); 1942 dipn = htonl(dip);
1943 dev = mlxsw_sp->router->rifs[rif]->dev; 1943 dev = mlxsw_sp->router->rifs[rif]->dev;
1944 n = neigh_lookup(&arp_tbl, &dipn, dev); 1944 n = neigh_lookup(&arp_tbl, &dipn, dev);
1945 if (!n) { 1945 if (!n)
1946 netdev_err(dev, "Failed to find matching neighbour for IP=%pI4h\n",
1947 &dip);
1948 return; 1946 return;
1949 }
1950 1947
1951 netdev_dbg(dev, "Updating neighbour with IP=%pI4h\n", &dip); 1948 netdev_dbg(dev, "Updating neighbour with IP=%pI4h\n", &dip);
1952 neigh_event_send(n, NULL); 1949 neigh_event_send(n, NULL);
@@ -1973,11 +1970,8 @@ static void mlxsw_sp_router_neigh_ent_ipv6_process(struct mlxsw_sp *mlxsw_sp,
1973 1970
1974 dev = mlxsw_sp->router->rifs[rif]->dev; 1971 dev = mlxsw_sp->router->rifs[rif]->dev;
1975 n = neigh_lookup(&nd_tbl, &dip, dev); 1972 n = neigh_lookup(&nd_tbl, &dip, dev);
1976 if (!n) { 1973 if (!n)
1977 netdev_err(dev, "Failed to find matching neighbour for IP=%pI6c\n",
1978 &dip);
1979 return; 1974 return;
1980 }
1981 1975
1982 netdev_dbg(dev, "Updating neighbour with IP=%pI6c\n", &dip); 1976 netdev_dbg(dev, "Updating neighbour with IP=%pI6c\n", &dip);
1983 neigh_event_send(n, NULL); 1977 neigh_event_send(n, NULL);