net: minor __dev_alloc_name() optimization
authorEric Dumazet <edumazet@google.com>
Thu, 3 Feb 2022 06:46:09 +0000 (22:46 -0800)
committerJakub Kicinski <kuba@kernel.org>
Fri, 4 Feb 2022 03:11:14 +0000 (19:11 -0800)
__dev_alloc_name() allocates a private zeroed page,
then sets bits in it while iterating through net devices.

It can use __set_bit() to avoid unnecessary locked operations.

Signed-off-by: Eric Dumazet <edumazet@google.com>
Link: https://lore.kernel.org/r/20220203064609.3242863-1-eric.dumazet@gmail.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
net/core/dev.c

index 1baab07820f65f9bcf88a6d73e2c9ff741d33c18..f79744d99413434ad28b26dee9aeeb2893a0e3ae 100644 (file)
@@ -1037,7 +1037,7 @@ static int __dev_alloc_name(struct net *net, const char *name, char *buf)
                                /*  avoid cases where sscanf is not exact inverse of printf */
                                snprintf(buf, IFNAMSIZ, name, i);
                                if (!strncmp(buf, name_node->name, IFNAMSIZ))
-                                       set_bit(i, inuse);
+                                       __set_bit(i, inuse);
                        }
                        if (!sscanf(d->name, name, &i))
                                continue;
@@ -1047,7 +1047,7 @@ static int __dev_alloc_name(struct net *net, const char *name, char *buf)
                        /*  avoid cases where sscanf is not exact inverse of printf */
                        snprintf(buf, IFNAMSIZ, name, i);
                        if (!strncmp(buf, d->name, IFNAMSIZ))
-                               set_bit(i, inuse);
+                               __set_bit(i, inuse);
                }
 
                i = find_first_zero_bit(inuse, max_netdevices);