All of lore.kernel.org
 help / color / mirror / Atom feed
From: Kay Sievers <kay.sievers@vrfy.org>
To: linux-hotplug@vger.kernel.org
Subject: [patch] pass SEQNUM trough udevd
Date: Sun, 29 Aug 2004 20:24:30 +0000	[thread overview]
Message-ID: <20040829202430.GA15492@vrfy.org> (raw)

[-- Attachment #1: Type: text/plain, Size: 254 bytes --]

Hi,
here we change udevd to pass the SEQNUM from the hotplug environment
to udev and the dev.d/ scripts. We need this for HAL to match the
hotplug event with the dev.d/ events.

It also changes the type from int to long to match the kernel.

Thanks,
Kay

[-- Attachment #2: udev-seqnum-02.patch --]
[-- Type: text/plain, Size: 4885 bytes --]

===== udev.h 1.58 vs edited =====
--- 1.58/udev.h	2004-08-05 00:43:58 +02:00
+++ edited/udev.h	2004-08-29 22:08:39 +02:00
@@ -33,9 +33,10 @@
 #define GROUP_SIZE			30
 #define MODE_SIZE			8
 
-#define ACTION_SIZE			30
-#define DEVPATH_SIZE			255
-#define SUBSYSTEM_SIZE			30
+#define ACTION_SIZE			32
+#define DEVPATH_SIZE			256
+#define SUBSYSTEM_SIZE			32
+#define SEQNUM_SIZE			32
 
 /* length of public data */
 #define UDEVICE_LEN (offsetof(struct udevice, bus_id))
===== udev_lib.h 1.6 vs edited =====
--- 1.6/udev_lib.h	2004-04-22 16:45:13 +02:00
+++ edited/udev_lib.h	2004-08-29 22:20:20 +02:00
@@ -59,6 +59,12 @@ do { \
 	snprintf((to) + strlen(to), maxsize - strlen(to)-1, "%u", i); \
 } while (0)
 
+#define strlongcat(to, i) \
+do { \
+	to[sizeof(to)-1] = '\0'; \
+	snprintf((to) + strlen(to), sizeof(to) - strlen(to)-1, "%li", i); \
+} while (0)
+
 #define foreach_strpart(str, separator, pos, len) \
 	for(pos = str, len = 0; \
 	    (pos) < ((str) + strlen(str)); \
===== udevd.c 1.34 vs edited =====
--- 1.34/udevd.c	2004-08-05 00:47:59 +02:00
+++ edited/udevd.c	2004-08-29 22:19:49 +02:00
@@ -44,7 +44,7 @@
 #include "logging.h"
 
 static int pipefds[2];
-static int expected_seqnum = 0;
+static long expected_seqnum = 0;
 volatile static int children_waiting;
 volatile static int run_msg_q;
 volatile static int sig_flag;
@@ -82,7 +82,7 @@ static void msg_dump_queue(void)
 	struct hotplug_msg *msg;
 
 	list_for_each_entry(msg, &msg_list, list)
-		dbg("sequence %d in queue", msg->seqnum);
+		dbg("sequence %li in queue", msg->seqnum);
 #endif
 }
 
@@ -120,7 +120,7 @@ static void msg_queue_insert(struct hotp
 	msg->queue_time = info.uptime;
 
 	list_add(&msg->list, &loop_msg->list);
-	dbg("queued message seq %d", msg->seqnum);
+	dbg("queued message seq %li", msg->seqnum);
 
 	/* run msg queue manager */
 	run_msg_q = 1;
@@ -134,12 +134,15 @@ static void udev_run(struct hotplug_msg 
 	pid_t pid;
 	char action[ACTION_SIZE];
 	char devpath[DEVPATH_SIZE];
-	char *env[] = { action, devpath, NULL };
+	char seqnum[SEQNUM_SIZE];
+	char *env[] = { action, devpath, seqnum, NULL };
 
 	strcpy(action, "ACTION=");
 	strfieldcat(action, msg->action);
 	strcpy(devpath, "DEVPATH=");
 	strfieldcat(devpath, msg->devpath);
+	strcpy(seqnum, "SEQNUM=");
+	strlongcat(seqnum, msg->seqnum);
 
 	pid = fork();
 	switch (pid) {
@@ -158,7 +161,7 @@ static void udev_run(struct hotplug_msg 
 		break;
 	default:
 		/* get SIGCHLD in main loop */
-		dbg("==> exec seq %d [%d] working at '%s'", msg->seqnum, pid, msg->devpath);
+		dbg("==> exec seq %li [%d] working at '%s'", msg->seqnum, pid, msg->devpath);
 		msg->pid = pid;
 	}
 }
@@ -186,9 +189,9 @@ static void exec_queue_manager()
 			/* move event to run list */
 			list_move_tail(&loop_msg->list, &running_list);
 			udev_run(loop_msg);
-			dbg("moved seq %d to running list", loop_msg->seqnum);
+			dbg("moved seq %li to running list", loop_msg->seqnum);
 		} else {
-			dbg("delay seq %d, cause seq %d already working on '%s'",
+			dbg("delay seq %li, cause seq %li already working on '%s'",
 				loop_msg->seqnum, msg->seqnum, msg->devpath);
 		}
 	}
@@ -199,7 +202,7 @@ static void msg_move_exec(struct hotplug
 	list_move_tail(&msg->list, &exec_list);
 	run_exec_q = 1;
 	expected_seqnum = msg->seqnum+1;
-	dbg("moved seq %d to exec, next expected is %d",
+	dbg("moved seq %li to exec, next expected is %li",
 		msg->seqnum, expected_seqnum);
 }
 
@@ -211,7 +214,7 @@ static void msg_queue_manager()
 	struct sysinfo info;
 	long msg_age = 0;
 
-	dbg("msg queue manager, next expected is %d", expected_seqnum);
+	dbg("msg queue manager, next expected is %li", expected_seqnum);
 recheck:
 	list_for_each_entry_safe(loop_msg, tmp_msg, &msg_list, list) {
 		/* move event with expected sequence to the exec list */
@@ -223,7 +226,7 @@ recheck:
 		/* move event with expired timeout to the exec list */
 		sysinfo(&info);
 		msg_age = info.uptime - loop_msg->queue_time;
-		dbg("seq %d is %li seconds old", loop_msg->seqnum, msg_age);
+		dbg("seq %li is %li seconds old", loop_msg->seqnum, msg_age);
 		if (msg_age > EVENT_TIMEOUT_SEC-1) {
 			msg_move_exec(loop_msg);
 			goto recheck;
@@ -350,9 +353,9 @@ static void udev_done(int pid)
 
 	list_for_each_entry(msg, &running_list, list) {
 		if (msg->pid == pid) {
-			dbg("<== exec seq %d came back", msg->seqnum);
+			dbg("<== exec seq %li came back", msg->seqnum);
 			run_queue_delete(msg);
-			
+
 			/* we want to run the exec queue manager since there may
 			 * be events waiting with the devpath of the one that
 			 * just finished
===== udevd.h 1.10 vs edited =====
--- 1.10/udevd.h	2004-04-02 12:35:39 +02:00
+++ edited/udevd.h	2004-08-29 22:08:40 +02:00
@@ -33,7 +33,7 @@ struct hotplug_msg {
 	char magic[20];
 	struct list_head list;
 	pid_t pid;
-	int seqnum;
+	long seqnum;
 	long queue_time;
 	char action[ACTION_SIZE];
 	char devpath[DEVPATH_SIZE];

             reply	other threads:[~2004-08-29 20:24 UTC|newest]

Thread overview: 4+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2004-08-29 20:24 Kay Sievers [this message]
2004-09-05  8:08 ` [patch] pass SEQNUM trough udevd Greg KH
2004-09-06  9:08 ` Kay Sievers
2004-09-09 23:58 ` Greg KH

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20040829202430.GA15492@vrfy.org \
    --to=kay.sievers@vrfy.org \
    --cc=linux-hotplug@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.