On Wed, Nov 23, 2016, at 15:48, Jiri Pirko wrote: > From: Ido Schimmel <ido...@mellanox.com> > > Make sure the device has a complete view of the FIB tables by invoking > their dump during module init. > > Signed-off-by: Ido Schimmel <ido...@mellanox.com> > Signed-off-by: Jiri Pirko <j...@mellanox.com> > --- > drivers/net/ethernet/mellanox/mlxsw/spectrum_router.c | 16 > ++++++++++++++++ > 1 file changed, 16 insertions(+) > > diff --git a/drivers/net/ethernet/mellanox/mlxsw/spectrum_router.c > b/drivers/net/ethernet/mellanox/mlxsw/spectrum_router.c > index 14bed1d..36a71d2 100644 > --- a/drivers/net/ethernet/mellanox/mlxsw/spectrum_router.c > +++ b/drivers/net/ethernet/mellanox/mlxsw/spectrum_router.c > @@ -2027,6 +2027,21 @@ static int mlxsw_sp_router_fib_event(struct > notifier_block *nb, > return NOTIFY_DONE; > } > > +static void mlxsw_sp_router_fib_dump(struct mlxsw_sp *mlxsw_sp) > +{ > + while (!fib_notifier_dump(&mlxsw_sp->fib_nb)) { > + /* Flush pending FIB notifications and then flush the > + * device's table before requesting another dump. Do > + * that with RTNL held, as FIB notification block is > + * already registered. > + */ > + mlxsw_core_flush_owq(); > + rtnl_lock(); > + mlxsw_sp_router_fib_flush(mlxsw_sp); > + rtnl_unlock(); > + } > +}
I think it is fine to use this kind of synchronization. But I think that this part of the logic still belongs into the core kernel. I still think it could happen that we will loop here indefinitely because of a lot of routing updates and as such would need to abort this loop after a number of tries. I would like that the kernel has one function to do this decision instead of later patching all users of this API. Do you think it is worth it? Bye, Hannes