From d806fff1dd5d5912aa7e61cd3d4ce873b802cde8 Mon Sep 17 00:00:00 2001 From: Yu Watanabe Date: Sun, 10 Apr 2022 23:41:34 +0900 Subject: [PATCH 1/3] udev/net: cache parsed result of net.ifnames= To make the log message shown only once. --- src/udev/net/link-config.c | 39 ++++++++++++++++++++++---------------- 1 file changed, 23 insertions(+), 16 deletions(-) diff --git a/src/udev/net/link-config.c b/src/udev/net/link-config.c index 95d15224af..2de172a67a 100644 --- a/src/udev/net/link-config.c +++ b/src/udev/net/link-config.c @@ -39,7 +39,6 @@ struct LinkConfigContext { LIST_HEAD(LinkConfig, configs); int ethtool_fd; - bool enable_name_policy; usec_t network_dirs_ts_usec; }; @@ -97,7 +96,6 @@ int link_config_ctx_new(LinkConfigContext **ret) { *ctx = (LinkConfigContext) { .ethtool_fd = -1, - .enable_name_policy = true, }; *ret = TAKE_PTR(ctx); @@ -298,12 +296,6 @@ int link_load_one(LinkConfigContext *ctx, const char *filename) { return 0; } -static bool enable_name_policy(void) { - bool b; - - return proc_cmdline_get_bool("net.ifnames", &b) <= 0 || b; -} - static int device_unsigned_attribute(sd_device *device, const char *attr, unsigned *type) { const char *s; int r; @@ -326,11 +318,6 @@ int link_config_load(LinkConfigContext *ctx) { link_configs_free(ctx); - if (!enable_name_policy()) { - ctx->enable_name_policy = false; - log_info("Network interface NamePolicy= disabled on kernel command line, ignoring."); - } - /* update timestamp */ paths_check_timestamp(NETWORK_DIRS, &ctx->network_dirs_ts_usec, true); @@ -686,7 +673,27 @@ static int link_apply_rtnl_settings(Link *link, sd_netlink **rtnl) { return 0; } -static int link_generate_new_name(Link *link, bool enable_name_policy) { +static bool enable_name_policy(void) { + static int cached = -1; + bool b; + int r; + + if (cached >= 0) + return cached; + + r = proc_cmdline_get_bool("net.ifnames", &b); + if (r < 0) + log_warning_errno(r, "Failed to parse net.ifnames= kernel command line option, ignoring: %m"); + if (r <= 0) + return (cached = true); + + if (!b) + log_info("Network interface NamePolicy= disabled on kernel command line."); + + return (cached = b); +} + +static int link_generate_new_name(Link *link) { LinkConfig *config; sd_device *device; @@ -709,7 +716,7 @@ static int link_generate_new_name(Link *link, bool enable_name_policy) { goto no_rename; } - if (enable_name_policy && config->name_policy) + if (enable_name_policy() && config->name_policy) for (NamePolicy *policy = config->name_policy; *policy != _NAMEPOLICY_INVALID; policy++) { const char *new_name = NULL; @@ -931,7 +938,7 @@ int link_apply_config(LinkConfigContext *ctx, sd_netlink **rtnl, Link *link) { if (r < 0) return r; - r = link_generate_new_name(link, ctx->enable_name_policy); + r = link_generate_new_name(link); if (r < 0) return r; From 262953ac77796c4bd10aec0e6b61beea508445b2 Mon Sep 17 00:00:00 2001 From: Yu Watanabe Date: Sun, 10 Apr 2022 23:55:06 +0900 Subject: [PATCH 2/3] udev: suppress multiple log message about interface naming scheme from workers --- src/udev/udev-builtin-net_id.c | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/udev/udev-builtin-net_id.c b/src/udev/udev-builtin-net_id.c index cede28a81b..f2ea2a7cd5 100644 --- a/src/udev/udev-builtin-net_id.c +++ b/src/udev/udev-builtin-net_id.c @@ -1138,8 +1138,15 @@ static int builtin_net_id(sd_device *dev, sd_netlink **rtnl, int argc, char *arg return 0; } +static int builtin_net_id_init(void) { + /* Load naming scheme here to suppress log messages in workers. */ + naming_scheme(); + return 0; +} + const UdevBuiltin udev_builtin_net_id = { .name = "net_id", .cmd = builtin_net_id, + .init = builtin_net_id_init, .help = "Network device properties", }; From 23ebdf4f8679b761261ef3190bb1e7e2f51d68c6 Mon Sep 17 00:00:00 2001 From: Yu Watanabe Date: Mon, 11 Apr 2022 00:02:17 +0900 Subject: [PATCH 3/3] udev: inline loop variable --- src/udev/udev-builtin.c | 19 +++++-------------- src/udev/udev-builtin.h | 2 +- 2 files changed, 6 insertions(+), 15 deletions(-) diff --git a/src/udev/udev-builtin.c b/src/udev/udev-builtin.c index a9095969bd..bf82709771 100644 --- a/src/udev/udev-builtin.c +++ b/src/udev/udev-builtin.c @@ -32,12 +32,10 @@ static const UdevBuiltin *const builtins[_UDEV_BUILTIN_MAX] = { }; void udev_builtin_init(void) { - unsigned i; - if (initialized) return; - for (i = 0; i < _UDEV_BUILTIN_MAX; i++) + for (UdevBuiltinCommand i = 0; i < _UDEV_BUILTIN_MAX; i++) if (builtins[i] && builtins[i]->init) builtins[i]->init(); @@ -45,12 +43,10 @@ void udev_builtin_init(void) { } void udev_builtin_exit(void) { - unsigned i; - if (!initialized) return; - for (i = 0; i < _UDEV_BUILTIN_MAX; i++) + for (UdevBuiltinCommand i = 0; i < _UDEV_BUILTIN_MAX; i++) if (builtins[i] && builtins[i]->exit) builtins[i]->exit(); @@ -58,18 +54,14 @@ void udev_builtin_exit(void) { } bool udev_builtin_validate(void) { - unsigned i; - - for (i = 0; i < _UDEV_BUILTIN_MAX; i++) + for (UdevBuiltinCommand i = 0; i < _UDEV_BUILTIN_MAX; i++) if (builtins[i] && builtins[i]->validate && builtins[i]->validate()) return true; return false; } void udev_builtin_list(void) { - unsigned i; - - for (i = 0; i < _UDEV_BUILTIN_MAX; i++) + for (UdevBuiltinCommand i = 0; i < _UDEV_BUILTIN_MAX; i++) if (builtins[i]) fprintf(stderr, " %-14s %s\n", builtins[i]->name, builtins[i]->help); } @@ -93,14 +85,13 @@ bool udev_builtin_run_once(UdevBuiltinCommand cmd) { } UdevBuiltinCommand udev_builtin_lookup(const char *command) { - UdevBuiltinCommand i; size_t n; assert(command); command += strspn(command, WHITESPACE); n = strcspn(command, WHITESPACE); - for (i = 0; i < _UDEV_BUILTIN_MAX; i++) + for (UdevBuiltinCommand i = 0; i < _UDEV_BUILTIN_MAX; i++) if (builtins[i] && strneq(builtins[i]->name, command, n)) return i; diff --git a/src/udev/udev-builtin.h b/src/udev/udev-builtin.h index abfed2c181..b0f2f919a9 100644 --- a/src/udev/udev-builtin.h +++ b/src/udev/udev-builtin.h @@ -6,7 +6,7 @@ #include "sd-device.h" #include "sd-netlink.h" -typedef enum { +typedef enum UdevBuiltinCommand { #if HAVE_BLKID UDEV_BUILTIN_BLKID, #endif