mirror of
https://github.com/torvalds/linux.git
synced 2026-04-18 06:44:00 -04:00
net: designate queue counts as "double ops protected" by instance lock
Drivers which opt into instance lock protection of ops should only call set_real_num_*_queues() under the instance lock. This means that queue counts are double protected (writes are under both rtnl_lock and instance lock, readers under either). Some readers may still be under the rtnl_lock, however, so for now we need double protection of writers. OTOH queue API paths are only under the protection of the instance lock, so we need to validate that the instance is actually locking ops, otherwise the input checks we do against queue count are racy. Acked-by: Stanislav Fomichev <sdf@fomichev.me> Link: https://patch.msgid.link/20250324224537.248800-6-kuba@kernel.org Signed-off-by: Jakub Kicinski <kuba@kernel.org>
This commit is contained in:
@@ -3130,6 +3130,7 @@ int netif_set_real_num_tx_queues(struct net_device *dev, unsigned int txq)
|
||||
if (dev->reg_state == NETREG_REGISTERED ||
|
||||
dev->reg_state == NETREG_UNREGISTERING) {
|
||||
ASSERT_RTNL();
|
||||
netdev_ops_assert_locked(dev);
|
||||
|
||||
rc = netdev_queue_update_kobjects(dev, dev->real_num_tx_queues,
|
||||
txq);
|
||||
@@ -3179,6 +3180,7 @@ int netif_set_real_num_rx_queues(struct net_device *dev, unsigned int rxq)
|
||||
|
||||
if (dev->reg_state == NETREG_REGISTERED) {
|
||||
ASSERT_RTNL();
|
||||
netdev_ops_assert_locked(dev);
|
||||
|
||||
rc = net_rx_queue_update_kobjects(dev, dev->real_num_rx_queues,
|
||||
rxq);
|
||||
|
||||
Reference in New Issue
Block a user