net-sysfs: warn if new queue objects are being created during device unregistration
authorAntoine Tenart <atenart@kernel.org>
Tue, 7 Dec 2021 14:57:25 +0000 (15:57 +0100)
committerJakub Kicinski <kuba@kernel.org>
Thu, 9 Dec 2021 02:36:32 +0000 (18:36 -0800)
Calling netdev_queue_update_kobjects is allowed during device
unregistration since commit 5c56580b74e5 ("net: Adjust TX queue kobjects
if number of queues changes during unregister"). But this is solely to
allow queue unregistrations. Any path attempting to add new queues after
a device started its unregistration should be fixed.

This patch adds a warning to detect such illegal use.

Signed-off-by: Antoine Tenart <atenart@kernel.org>
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
net/core/net-sysfs.c

index 33f408c..53ea262 100644 (file)
@@ -1694,6 +1694,13 @@ netdev_queue_update_kobjects(struct net_device *dev, int old_num, int new_num)
        int i;
        int error = 0;
 
+       /* Tx queue kobjects are allowed to be updated when a device is being
+        * unregistered, but solely to remove queues from qdiscs. Any path
+        * adding queues should be fixed.
+        */
+       WARN(dev->reg_state == NETREG_UNREGISTERING && new_num > old_num,
+            "New queues can't be registered after device unregistration.");
+
        for (i = old_num; i < new_num; i++) {
                error = netdev_queue_add_kobject(dev, i);
                if (error) {