linux/drivers/net/ethernet
Ido Schimmel c3852ef7f2 ipv4: fib: Replay events when registering FIB notifier
Commit b90eb75494 ("fib: introduce FIB notification infrastructure")
introduced a new notification chain to notify listeners (f.e., switchdev
drivers) about addition and deletion of routes.

However, upon registration to the chain the FIB tables can already be
populated, which means potential listeners will have an incomplete view
of the tables.

Solve that by dumping the FIB tables and replaying the events to the
passed notification block. The dump itself is done using RCU in order
not to starve consumers that need RTNL to make progress.

The integrity of the dump is ensured by reading the FIB change sequence
counter before and after the dump under RTNL. This allows us to avoid
the problematic situation in which the dumping process sends a ENTRY_ADD
notification following ENTRY_DEL generated by another process holding
RTNL.

Callers of the registration function may pass a callback that is
executed in case the dump was inconsistent with current FIB tables.

The number of retries until a consistent dump is achieved is set to a
fixed number to prevent callers from looping for long periods of time.
In case current limit proves to be problematic in the future, it can be
easily converted to be configurable using a sysctl.

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>
2016-12-03 19:29:35 -05:00
..
3com net: 3com: typhoon: fix typhoon_get_link_ksettings 2016-11-09 13:25:14 -05:00
8390 net: deprecate eth_change_mtu, remove usage 2016-10-13 09:36:57 -04:00
adaptec net: adaptec: starfire: use new api ethtool_{get|set}_link_ksettings 2016-11-09 13:25:12 -05:00
adi net: deprecate eth_change_mtu, remove usage 2016-10-13 09:36:57 -04:00
aeroflex net: phy: expose phy_aneg_done API for use by drivers 2016-11-13 00:56:26 -05:00
agere ethernet: use core min/max MTU checking 2016-10-18 11:34:22 -04:00
allwinner net: ethernet: sun4i-emac: Read rxhdr in CPU byte-order 2016-11-15 22:05:54 -05:00
alteon net: alteon: acenic: use new api ethtool_{get|set}_link_ksettings 2016-11-09 13:25:12 -05:00
altera Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net 2016-12-03 12:29:53 -05:00
amazon net: ena: use setup_timer() and mod_timer() 2016-10-26 17:21:59 -04:00
amd Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net 2016-12-03 12:29:53 -05:00
apm drivers: net: xgene: ethtool: Add get/set_pauseparam 2016-12-03 15:46:50 -05:00
apple net: deprecate eth_change_mtu, remove usage 2016-10-13 09:36:57 -04:00
arc net: arc_emac: add dependencies on associated arches and compile test 2016-11-29 18:57:36 -05:00
atheros alx: enable multiple tx queues 2016-11-15 22:46:30 -05:00
aurora Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net 2016-12-03 12:29:53 -05:00
broadcom bnx2x: use reset to set network header 2016-12-03 15:49:16 -05:00
brocade net: brocade: bna: use new api ethtool_{get|set}_link_ksettings 2016-11-30 10:29:02 -05:00
cadence Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net 2016-12-03 12:29:53 -05:00
calxeda ethernet: use core min/max MTU checking 2016-10-18 11:34:22 -04:00
cavium net: thunderx: Fix transmit queue timeout issue 2016-12-02 13:32:59 -05:00
chelsio Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net 2016-12-03 12:29:53 -05:00
cirrus net: deprecate eth_change_mtu, remove usage 2016-10-13 09:36:57 -04:00
cisco enic: set skb->hash type properly 2016-11-02 15:32:53 -04:00
davicom net: deprecate eth_change_mtu, remove usage 2016-10-13 09:36:57 -04:00
dec net: deprecate eth_change_mtu, remove usage 2016-10-13 09:36:57 -04:00
dlink ethernet/dlink: use core min/max MTU checking 2016-10-18 11:34:20 -04:00
emulex Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net 2016-11-22 13:27:16 -05:00
ezchip net: nps_enet: Fix module autoload 2016-10-17 13:03:02 -04:00
faraday net/faraday: Stop NCSI device on shutdown 2016-10-04 02:11:51 -04:00
freescale Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net 2016-12-03 12:29:53 -05:00
fujitsu net: deprecate eth_change_mtu, remove usage 2016-10-13 09:36:57 -04:00
hisilicon Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net 2016-11-15 10:54:36 -05:00
hp net: deprecate eth_change_mtu, remove usage 2016-10-13 09:36:57 -04:00
i825xx net: deprecate eth_change_mtu, remove usage 2016-10-13 09:36:57 -04:00
ibm ehea: Remove unnecessary memset of stats in netdev private data 2016-11-30 14:26:26 -05:00
intel Merge branch '40GbE' of git://git.kernel.org/pub/scm/linux/kernel/git/jkirsher/next-queue 2016-12-03 19:10:48 -05:00
marvell Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net 2016-12-03 12:29:53 -05:00
mediatek Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net 2016-12-03 12:29:53 -05:00
mellanox ipv4: fib: Replay events when registering FIB notifier 2016-12-03 19:29:35 -05:00
micrel ethernet: use core min/max MTU checking 2016-10-18 11:34:22 -04:00
microchip net: deprecate eth_change_mtu, remove usage 2016-10-13 09:36:57 -04:00
moxa net: deprecate eth_change_mtu, remove usage 2016-10-13 09:36:57 -04:00
myricom myri10ge: fix typo in parameter description 2016-10-20 14:47:53 -04:00
natsemi net: ns83820: use dev_kfree_skb_irq instead of kfree_skb 2016-10-26 17:21:59 -04:00
neterion ethernet/neterion: use core min/max MTU checking 2016-10-18 11:34:20 -04:00
netronome bpf, xdp: drop rcu_read_lock from bpf_prog_run_xdp and move to caller 2016-12-02 11:06:24 -05:00
nuvoton net: deprecate eth_change_mtu, remove usage 2016-10-13 09:36:57 -04:00
nvidia ethernet: use core min/max MTU checking 2016-10-18 11:34:22 -04:00
nxp net: deprecate eth_change_mtu, remove usage 2016-10-13 09:36:57 -04:00
oki-semi ethernet: use core min/max MTU checking 2016-10-18 11:34:22 -04:00
packetengines net: deprecate eth_change_mtu, remove usage 2016-10-13 09:36:57 -04:00
pasemi ethernet: use core min/max MTU checking 2016-10-18 11:34:22 -04:00
qlogic qede: use reset to set network header 2016-12-03 15:49:16 -05:00
qualcomm Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net 2016-12-03 12:29:53 -05:00
rdc net: deprecate eth_change_mtu, remove usage 2016-10-13 09:36:57 -04:00
realtek Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net 2016-10-30 12:42:58 -04:00
renesas Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net 2016-12-03 12:29:53 -05:00
rocker ipv4: fib: Replay events when registering FIB notifier 2016-12-03 19:29:35 -05:00
samsung ethernet: use core min/max MTU checking 2016-10-18 11:34:22 -04:00
seeq net: deprecate eth_change_mtu, remove usage 2016-10-13 09:36:57 -04:00
sfc sfc: remove EFX_BUG_ON_PARANOID, use EFX_WARN_ON_[ONCE_]PARANOID instead 2016-12-03 16:11:00 -05:00
sgi net: deprecate eth_change_mtu, remove usage 2016-10-13 09:36:57 -04:00
silan net: deprecate eth_change_mtu, remove usage 2016-10-13 09:36:57 -04:00
sis net: deprecate eth_change_mtu, remove usage 2016-10-13 09:36:57 -04:00
smsc net: ethernet: smsc9420: Utilize phy_ethtool_nway_reset 2016-11-15 16:33:35 -05:00
stmicro net: stmmac: unify mdio functions 2016-12-03 15:23:51 -05:00
sun Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net 2016-11-22 13:27:16 -05:00
synopsys Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net 2016-12-03 12:29:53 -05:00
tehuti ethernet: use core min/max MTU checking 2016-10-18 11:34:22 -04:00
ti net: ethernet: ti: davinci_cpdma: add missing EXPORTs 2016-12-03 15:27:38 -05:00
tile ethernet/tile: use core min/max MTU checking 2016-10-18 11:34:21 -04:00
toshiba Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net 2016-11-15 10:54:36 -05:00
tundra net: deprecate eth_change_mtu, remove usage 2016-10-13 09:36:57 -04:00
via ethernet: use core min/max MTU checking 2016-10-18 11:34:22 -04:00
wiznet net: deprecate eth_change_mtu, remove usage 2016-10-13 09:36:57 -04:00
xilinx net: ethernet: ll_temac: Utilize phy_ethtool_nway_reset 2016-11-15 16:33:35 -05:00
xircom net: deprecate eth_change_mtu, remove usage 2016-10-13 09:36:57 -04:00
xscale net: ethernet: ixp4xx_eth: Utilize phy_ethtool_nway_reset 2016-11-15 16:33:35 -05:00
dnet.c net: deprecate eth_change_mtu, remove usage 2016-10-13 09:36:57 -04:00
dnet.h
ec_bhf.c net: deprecate eth_change_mtu, remove usage 2016-10-13 09:36:57 -04:00
ethoc.c net: ethoc: Implement ethtool::nway_reset 2016-11-16 13:44:00 -05:00
fealnx.c net: deprecate eth_change_mtu, remove usage 2016-10-13 09:36:57 -04:00
jme.c ethernet: use net core MTU range checking in more drivers 2016-10-20 14:51:08 -04:00
jme.h
Kconfig sfc: separate out SFC4000 ("Falcon") support into new sfc-falcon driver 2016-11-30 10:16:58 -05:00
korina.c net: deprecate eth_change_mtu, remove usage 2016-10-13 09:36:57 -04:00
lantiq_etop.c net: ethernet: lantiq_etop: Utilize phy_ethtool_nway_reset 2016-11-15 16:33:35 -05:00
Makefile sfc: separate out SFC4000 ("Falcon") support into new sfc-falcon driver 2016-11-30 10:16:58 -05:00
netx-eth.c net: deprecate eth_change_mtu, remove usage 2016-10-13 09:36:57 -04:00