mbox series

[net,0/4] Fix broken backpressure during FDB dump in DSA drivers

Message ID 20210810111956.1609499-1-vladimir.oltean@nxp.com
Headers show
Series Fix broken backpressure during FDB dump in DSA drivers | expand

Message

Vladimir Oltean Aug. 10, 2021, 11:19 a.m. UTC
rtnl_fdb_dump() has logic to split a dump of PF_BRIDGE neighbors into
multiple netlink skbs if the buffer provided by user space is too small
(one buffer will typically handle a few hundred FDB entries).

When the current buffer becomes full, nlmsg_put() in
dsa_slave_port_fdb_do_dump() returns -EMSGSIZE and DSA saves the index
of the last dumped FDB entry, returns to rtnl_fdb_dump() up to that
point, and then the dump resumes on the same port with a new skb, and
FDB entries up to the saved index are simply skipped.

Since dsa_slave_port_fdb_do_dump() is pointed to by the "cb" passed to
drivers, then drivers must check for the -EMSGSIZE error code returned
by it. Otherwise, when a netlink skb becomes full, DSA will no longer
save newly dumped FDB entries to it, but the driver will continue
dumping. So FDB entries will be missing from the dump.

DSA is one of the few switchdev drivers that have an .ndo_fdb_dump
implementation, because of the assumption that the hardware and software
FDBs cannot be efficiently kept in sync via SWITCHDEV_FDB_ADD_TO_BRIDGE.
Other drivers with a home-cooked .ndo_fdb_dump implementation are
ocelot and dpaa2-switch. These appear to do the correct thing, as do the
other DSA drivers, so nothing else appears to need fixing.

Vladimir Oltean (4):
  net: dsa: hellcreek: fix broken backpressure in .port_fdb_dump
  net: dsa: lan9303: fix broken backpressure in .port_fdb_dump
  net: dsa: lantiq: fix broken backpressure in .port_fdb_dump
  net: dsa: sja1105: fix broken backpressure in .port_fdb_dump

 drivers/net/dsa/hirschmann/hellcreek.c |  7 ++++--
 drivers/net/dsa/lan9303-core.c         | 34 ++++++++++++++------------
 drivers/net/dsa/lantiq_gswip.c         | 14 ++++++++---
 drivers/net/dsa/sja1105/sja1105_main.c |  4 ++-
 4 files changed, 37 insertions(+), 22 deletions(-)

Comments

patchwork-bot+netdevbpf@kernel.org Aug. 10, 2021, 12:20 p.m. UTC | #1
Hello:

This series was applied to netdev/net.git (refs/heads/master):

On Tue, 10 Aug 2021 14:19:52 +0300 you wrote:
> rtnl_fdb_dump() has logic to split a dump of PF_BRIDGE neighbors into
> multiple netlink skbs if the buffer provided by user space is too small
> (one buffer will typically handle a few hundred FDB entries).
> 
> When the current buffer becomes full, nlmsg_put() in
> dsa_slave_port_fdb_do_dump() returns -EMSGSIZE and DSA saves the index
> of the last dumped FDB entry, returns to rtnl_fdb_dump() up to that
> point, and then the dump resumes on the same port with a new skb, and
> FDB entries up to the saved index are simply skipped.
> 
> [...]

Here is the summary with links:
  - [net,1/4] net: dsa: hellcreek: fix broken backpressure in .port_fdb_dump
    https://git.kernel.org/netdev/net/c/cd391280bf46
  - [net,2/4] net: dsa: lan9303: fix broken backpressure in .port_fdb_dump
    https://git.kernel.org/netdev/net/c/ada2fee185d8
  - [net,3/4] net: dsa: lantiq: fix broken backpressure in .port_fdb_dump
    https://git.kernel.org/netdev/net/c/871a73a1c8f5
  - [net,4/4] net: dsa: sja1105: fix broken backpressure in .port_fdb_dump
    https://git.kernel.org/netdev/net/c/21b52fed928e

You are awesome, thank you!
--
Deet-doot-dot, I am a bot.
https://korg.docs.kernel.org/patchwork/pwbot.html