]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
udevd: notify when max number value of children is reached only once per batch of...
authorFranck Bui <fbui@suse.com>
Wed, 24 Apr 2019 09:26:42 +0000 (11:26 +0200)
committerLennart Poettering <lennart@poettering.net>
Fri, 26 Apr 2019 07:58:12 +0000 (09:58 +0200)
When booting with "udev.log-priority=debug" for example, the output might be
spammed with messages like this:

    systemd-udevd[23545]: maximum number (248) of children reached
    systemd-udevd[23545]: maximum number (248) of children reached
    systemd-udevd[23545]: maximum number (248) of children reached
    systemd-udevd[23545]: maximum number (248) of children reached
    systemd-udevd[23545]: maximum number (248) of children reached
    systemd-udevd[23545]: maximum number (248) of children reached
    systemd-udevd[23545]: maximum number (248) of children reached

While the message itself is useful, printing it per batch of events should be
enough.

src/udev/udevd.c

index 140ec35293b32970b3f99649ebbdc8d32e4bbf20..a6f7ee82bbfebf447d3251c073f6b4383a365bed 100644 (file)
@@ -549,6 +549,7 @@ static int worker_spawn(Manager *manager, struct event *event) {
 }
 
 static void event_run(Manager *manager, struct event *event) {
+        static bool log_children_max_reached = true;
         struct worker *worker;
         Iterator i;
         int r;
@@ -573,11 +574,19 @@ static void event_run(Manager *manager, struct event *event) {
         }
 
         if (hashmap_size(manager->workers) >= arg_children_max) {
-                if (arg_children_max > 1)
+
+                /* Avoid spamming the debug logs if the limit is already reached and
+                 * many events still need to be processed */
+                if (log_children_max_reached && arg_children_max > 1) {
                         log_debug("Maximum number (%u) of children reached.", hashmap_size(manager->workers));
+                        log_children_max_reached = false;
+                }
                 return;
         }
 
+        /* Re-enable the debug message for the next batch of events */
+        log_children_max_reached = true;
+
         /* start new worker and pass initial device */
         worker_spawn(manager, event);
 }