RFC: verbose output for udevadm settle

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



>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;
 		}
 

[Index of Archives]     [Linux Kernel]     [Linux DVB]     [Asterisk Internet PBX]     [DCCP]     [Netdev]     [X.org]     [Util Linux NG]     [Fedora Women]     [ALSA Devel]     [Linux USB]

  Powered by Linux