>From time to time I get bugs about udevadm settle timeouts at boot time, and usually they are quite hard to investigate for random users. So I tought about being verbose about what is left in the queue when the timeout is reached. Please comment. -- ciao, Marco
--- a/udevsettle.c +++ b/udevsettle.c @@ -31,10 +31,43 @@ #include "udev.h" #include "udevd.h" +#include "list.h" #define DEFAULT_TIMEOUT 180 #define LOOP_PER_SECOND 20 +static void print_queue(const char *dir) +{ + LIST_HEAD(files); + struct name_entry *item; + + if (add_matching_files(&files, dir, NULL) < 0) + return; + + printf("\n\nAfter the udevsettle timeout, the events queue contains:\n\n"); + + list_for_each_entry(item, &files, node) { + char target[NAME_SIZE]; + size_t len; + const char *filename = strrchr(item->name, '/'); + + if (filename == NULL) + continue; + filename++; + if (*filename == '\0') + continue; + + len = readlink(item->name, target, sizeof(target)); + if (len < 0) + continue; + target[len] = '\0'; + + printf("%s: %s\n", filename, target); + } + + printf("\n\n"); +} + int udevsettle(int argc, char *argv[], char *envp[]) { char queuename[PATH_SIZE]; @@ -97,6 +130,7 @@ int udevsettle(int argc, char *argv[], c } if (loop <= 0) { info("timeout waiting for queue\n"); + print_queue(queuename); goto exit; }