net: Adjust TX queue kobjects if number of queues changes during unregister
authorBen Hutchings <bhutchings@solarflare.com>
Tue, 15 Feb 2011 19:39:21 +0000 (19:39 +0000)
committerBen Hutchings <bhutchings@solarflare.com>
Tue, 15 Feb 2011 19:45:33 +0000 (19:45 +0000)
If the root qdisc for a net device is mqprio, and the driver's
ndo_setup_tc() operation dynamically adds and remvoes TX queues,
netif_set_real_num_tx_queues() will be called during device
unregistration to remove the extra TX queues when the qdisc is
destroyed.  Currently this causes the corresponding kobjects
to be leaked, and the device's reference count never drops to 0.

Signed-off-by: Ben Hutchings <bhutchings@solarflare.com>
net/core/dev.c

index 6392ea0a59104a5e5b6dfe11d0fc977e2e349d60..30c71f9b041983fd96e42c25bcbc8a7ee4d69c6c 100644 (file)
@@ -1648,7 +1648,8 @@ int netif_set_real_num_tx_queues(struct net_device *dev, unsigned int txq)
        if (txq < 1 || txq > dev->num_tx_queues)
                return -EINVAL;
 
-       if (dev->reg_state == NETREG_REGISTERED) {
+       if (dev->reg_state == NETREG_REGISTERED ||
+           dev->reg_state == NETREG_UNREGISTERING) {
                ASSERT_RTNL();
 
                rc = netdev_queue_update_kobjects(dev, dev->real_num_tx_queues,