On Mon, Feb 12, 2024 at 08:18:44PM +0100, Tobias Waldekranz wrote: > When unoffloading a device, it is important to ensure that all > relevant deferred events are delivered to it before it disassociates > itself from the bridge. > > Before this change, this was true for the normal case when a device > maps 1:1 to a net_bridge_port, i.e. > > br0 > / > swp0 > > When swp0 leaves br0, the call to switchdev_deferred_process() in > del_nbp() makes sure to process any outstanding events while the > device is still associated with the bridge. > > In the case when the association is indirect though, i.e. when the > device is attached to the bridge via an intermediate device, like a > LAG... > > br0 > / > lag0 > / > swp0 > > ...then detaching swp0 from lag0 does not cause any net_bridge_port to > be deleted, so there was no guarantee that all events had been > processed before the device disassociated itself from the bridge. > > Fix this by always synchronously processing all deferred events before > signaling completion of unoffloading back to the driver. > > Fixes: 4e51bf44a03a ("net: bridge: move the switchdev object replay helpers to "push" mode") > Signed-off-by: Tobias Waldekranz <tobias@xxxxxxxxxxxxxx> > --- Reviewed-by: Vladimir Oltean <olteanv@xxxxxxxxx>