net: bridge: vlan: Add a schedule point during VLAN processing
authorIdo Schimmel <idosch@mellanox.com>
Thu, 30 Apr 2020 19:38:45 +0000 (22:38 +0300)
committerDavid S. Miller <davem@davemloft.net>
Fri, 1 May 2020 00:45:41 +0000 (17:45 -0700)
commit7979457b1d3a069cd857f5bd69e070e30223dd0c
tree20777cca3412823b63d5c76215cd77c934d2acec
parentf9c6cea0b38518741c8dcf26ac056d26ee2fd61d
net: bridge: vlan: Add a schedule point during VLAN processing

User space can request to delete a range of VLANs from a bridge slave in
one netlink request. For each deleted VLAN the FDB needs to be traversed
in order to flush all the affected entries.

If a large range of VLANs is deleted and the number of FDB entries is
large or the FDB lock is contented, it is possible for the kernel to
loop through the deleted VLANs for a long time. In case preemption is
disabled, this can result in a soft lockup.

Fix this by adding a schedule point after each VLAN is deleted to yield
the CPU, if needed. This is safe because the VLANs are traversed in
process context.

Fixes: bdced7ef7838 ("bridge: support for multiple vlans and vlan ranges in setlink and dellink requests")
Signed-off-by: Ido Schimmel <idosch@mellanox.com>
Reported-by: Stefan Priebe - Profihost AG <s.priebe@profihost.ag>
Tested-by: Stefan Priebe - Profihost AG <s.priebe@profihost.ag>
Acked-by: Nikolay Aleksandrov <nikolay@cumulusnetworks.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
net/bridge/br_netlink.c