On Tue Aug 10 2021, Vladimir Oltean 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. > > 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. > > Fix the broken backpressure by propagating the "cb" return code and > allow rtnl_fdb_dump() to restart the FDB dump with a new skb. > > Fixes: e4b27ebc780f ("net: dsa: Add DSA driver for Hirschmann Hellcreek switches") > Signed-off-by: Vladimir Oltean Acked-by: Kurt Kanzenbach