mlxsw: spectrum_router: Don't read 'nud_state' without lock
authorIdo Schimmel <idosch@mellanox.com>
Mon, 6 Feb 2017 15:20:16 +0000 (16:20 +0100)
committerDavid S. Miller <davem@davemloft.net>
Mon, 6 Feb 2017 16:25:57 +0000 (11:25 -0500)
We periodically ask the neighbouring system to try and resolve
neighbours that are used for nexthops, but aren't currently resolved.

However, 'nud_state' is protected by the neighbour lock, so we shouldn't
access it without taking it. Instead, we can simply check the
'connected' field of the neighbour entry, which we update upon
NEIGH_UPDATE events.

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

index 98a6d03fc0a6cd18310722a597e6ad7303b7728a..ec022f9c302aa019b235e84be6496bfd8904e7b2 100644 (file)
@@ -896,7 +896,7 @@ static void mlxsw_sp_router_probe_unresolved_nexthops(struct work_struct *work)
        rtnl_lock();
        list_for_each_entry(neigh_entry, &mlxsw_sp->router.nexthop_neighs_list,
                            nexthop_neighs_list_node)
-               if (!(neigh_entry->key.n->nud_state & NUD_VALID))
+               if (!neigh_entry->connected)
                        neigh_event_send(neigh_entry->key.n, NULL);
        rtnl_unlock();