Skip to contentSkip to conversation

wait_for_sysfs messages (more debugging info)

DISCUSSION Applied Jeff 4 participants 10 messages Oct 14, 2004 – Oct 18, 2004

lore
Share & tools
lore

Jeff

author
#0 lore raw

Sorry to double post but thought with the more verbose debugging this might help you more:

Oct 14 16:04:00 [wait_for_sysfs] either wait_for_sysfs (udev 038) needs 

an update
to handle the device '/class/vc/vcs2' properly (4) or the sysfs-support of your de
vice's driver needs to be fixed, please report to <[email protected]
eforge.net>

Oct 14 16:04:00 [wait_for_sysfs] either wait_for_sysfs (udev 038) needs 

an update
to handle the device '/class/vc/vcsa2' properly (4) or the sysfs-support of your d
evice's driver needs to be fixed, please report to <[email protected]
ceforge.net>

Oct 14 16:04:00 [wait_for_sysfs] either wait_for_sysfs (udev 038) needs 

an update
to handle the device '/class/vc/vcs3' properly (4) or the sysfs-support of your de
vice's driver needs to be fixed, please report to <[email protected]
eforge.net>

Oct 14 16:04:00 [wait_for_sysfs] either wait_for_sysfs (udev 038) needs 

an update
to handle the device '/class/vc/vcsa3' properly (4) or the sysfs-support of your d
evice's driver needs to be fixed, please report to <[email protected]
ceforge.net>

Oct 14 16:04:01 [wait_for_sysfs] either wait_for_sysfs (udev 038) needs 

an update
to handle the device '/class/vc/vcsa2' properly (4) or the sysfs-support of your d
evice's driver needs to be fixed, please report to <[email protected]
ceforge.net>

Oct 14 16:04:01 [wait_for_sysfs] either wait_for_sysfs (udev 038) needs 

an update
to handle the device '/class/vc/vcs3' properly (4) or the sysfs-support of your de
vice's driver needs to be fixed, please report to <[email protected]
eforge.net>

Oct 14 16:04:01 [wait_for_sysfs] either wait_for_sysfs (udev 038) needs 

an update
to handle the device '/class/vc/vcsa3' properly (4) or the sysfs-support of your d
evice's driver needs to be fixed, please report to <[email protected]
ceforge.net>

Oct 14 16:04:01 [wait_for_sysfs] either wait_for_sysfs (udev 038) needs 

an update
to handle the device '/class/vc/vcs2' properly (3) or the sysfs-support of your de
vice's driver needs to be fixed, please report to <[email protected]
eforge.net>

Oct 14 16:04:01 [wait_for_sysfs] either wait_for_sysfs (udev 038) needs 

an update
to handle the device '/class/vc/vcs5' properly (4) or the sysfs-support of your de
vice's driver needs to be fixed, please report to <[email protected]
eforge.net>

Oct 14 16:04:01 [wait_for_sysfs] either wait_for_sysfs (udev 038) needs 

an update
to handle the device '/class/vc/vcsa5' properly (4) or the sysfs-support of your d
evice's driver needs to be fixed, please report to <[email protected]
ceforge.net>

Oct 14 16:04:01 [wait_for_sysfs] either wait_for_sysfs (udev 038) needs 

an update
to handle the device '/class/vc/vcs6' properly (4) or the sysfs-support of your de
vice's driver needs to be fixed, please report to <[email protected]
eforge.net>

Oct 14 16:04:01 [wait_for_sysfs] either wait_for_sysfs (udev 038) needs 

an update
to handle the device '/class/vc/vcsa6' properly (4) or the sysfs-support of your d
evice's driver needs to be fixed, please report to <[email protected]
ceforge.net>

Oct 14 16:04:01 [wait_for_sysfs] either wait_for_sysfs (udev 038) needs 

an update
to handle the device '/class/vc/vcsa4' properly (3) or the sysfs-support of your d
evice's driver needs to be fixed, please report to <[email protected]>

Oct 14 16:04:01 [wait_for_sysfs] either wait_for_sysfs (udev 038) needs 

an update
to handle the device '/class/vc/vcs8' properly (4) or the sysfs-support of your de
vice's driver needs to be fixed, please report to <[email protected]
eforge.net>

Oct 14 16:04:01 [wait_for_sysfs] either wait_for_sysfs (udev 038) needs 

an update
to handle the device '/class/vc/vcsa8' properly (4) or the sysfs-support of your d
evice's driver needs to be fixed, please report to <[email protected]
ceforge.net>

Oct 14 16:04:01 [wait_for_sysfs] either wait_for_sysfs (udev 038) needs 

an update
to handle the device '/class/vc/vcs9' properly (4) or the sysfs-support of your de
vice's driver needs to be fixed, please report to <[email protected]
eforge.net>

Oct 14 16:04:01 [wait_for_sysfs] either wait_for_sysfs (udev 038) needs 

an update
to handle the device '/class/vc/vcsa9' properly (4) or the sysfs-support of your d
evice's driver needs to be fixed, please report to <[email protected]
ceforge.net>

Oct 14 16:04:01 [wait_for_sysfs] either wait_for_sysfs (udev 038) needs 

an update
to handle the device '/class/vc/vcs10' properly (4) or the sysfs-support of your d
evice's driver needs to be fixed, please report to <[email protected]
ceforge.net>

Oct 14 16:04:01 [wait_for_sysfs] either wait_for_sysfs (udev 038) needs 

an update
to handle the device '/class/vc/vcs11' properly (4) or the sysfs-support of your d
evice's driver needs to be fixed, please report to <[email protected]
ceforge.net>

Oct 14 16:04:01 [wait_for_sysfs] either wait_for_sysfs (udev 038) needs 

an update
to handle the device '/class/vc/vcsa11' properly (4) or the sysfs-support of your
device's driver needs to be fixed, please report to <[email protected]
rceforge.net>

If I can be of anymore help please let me know. I'm no dev but I have somewhat of a clue. Thanks GKH-you are certainly improving things.

Signature · 12 lines
"Experience is a good school but the fees are high." Heinrich Heine


-------------------------------------------------------
This SF.net email is sponsored by: IT Product Guide on ITManagersJournal
Use IT products in your business? Tell us what you think of them. Give us
Your Opinions, Get Free ThinkGeek Gift Certificates! Click to find out more
http://productguide.itmanagersjournal.com/guidepromo.tmpl
_______________________________________________
Linux-hotplug-devel mailing list  http://linux-hotplug.sourceforge.net
[email protected]
https://lists.sourceforge.net/lists/listinfo/linux-hotplug-devel
#1 lore raw
Quoted 9 lines · Jeff

Sorry to double post but thought with the more verbose debugging this might help you more:

Oct 14 16:04:00 [wait_for_sysfs] either wait_for_sysfs (udev 038) needs 

an update
to handle the device '/class/vc/vcs2' properly (4) or the sysfs-support of your de
vice's driver needs to be fixed, please report to <[email protected]
eforge.net>

<!-- snip -->

Quoted 8 lines
Oct 14 16:04:01 [wait_for_sysfs] either wait_for_sysfs (udev 038) needs 

an update
to handle the device '/class/vc/vcsa11' properly (4) or the sysfs-support of your
device's driver needs to be fixed, please report to <[email protected]
rceforge.net>

I get these with 2.6.9-rc4 and udev 038

Quoted 2 lines

If I can be of anymore help please let me know. I'm no dev but I have somewhat of a clue. Thanks GKH-you are certainly improving things.

Indeed

Thanks

Jesse

-------------------------------------------------------
This SF.net email is sponsored by: IT Product Guide on ITManagersJournal Use IT products in your business? Tell us what you think of them. Give us Your Opinions, Get Free ThinkGeek Gift Certificates! Click to find out more
http://productguide.itmanagersjournal.com/guidepromo.tmpl
_______________________________________________
Linux-hotplug-devel mailing list http://linux-hotplug.sourceforge.net
[email protected]
https://lists.sourceforge.net/lists/listinfo/linux-hotplug-devel

author
#2 lore raw
In reply to Jeff
Quoted 20 lines · Kay Sievers
Quoted 12 lines · Kay Sievers
Quoted 9 lines · Jeff

Sorry to double post but thought with the more verbose debugging this might help you more:

Oct 14 16:04:00 [wait_for_sysfs] either wait_for_sysfs (udev 038) needs 

an update
to handle the device '/class/vc/vcs2' properly (4) or the sysfs-support of your de
vice's driver needs to be fixed, please report to <[email protected]
eforge.net>

Quoted 4 lines

Seems like you have the /etc/hotplug.d/default/00-wait_for_sysfs.hotplug symlink still installed. Removing this will cut the messages to the half but not solve the problem, sorry. We are working on it, but currently have absolutely no idea what's going wrong here.

Quoted 9 lines

Sorry for the confusion. It seems that the kernel emits two events for every device, which is wrong. It's not a second symlink as I pointed out to you first.

Thanks,
Kay

Just an update-039 fixes the majority of the vcs messages. I've rebooted a few times and now only get 1-3 of the messages. Example:

Oct 15 21:46:28 [wait_for_sysfs] either wait_for_sysfs (udev 039) needs 

an updat
e to handle the device '/class/vc/vcs8' properly (3) or the sysfs-support of you
r device's driver needs to be fixed, please report to <linux-hotplug-devel@lists
.sourceforge.net>

Oct 15 21:46:28 [wait_for_sysfs] either wait_for_sysfs (udev 039) needs 

an updat
e to handle the device '/class/vc/vcsa8' properly (3) or the sysfs-support of yo
ur device's driver needs to be fixed, please report to <linux-hotplug-devel@list
s.sourceforge.net>

Oct 15 21:46:29 [wait_for_sysfs] either wait_for_sysfs (udev 039) needs 

an updat
e to handle the device '/class/vc/vcs5' properly (3) or the sysfs-support of you
r device's driver needs to be fixed, please report to <linux-hotplug-devel@lists
.sourceforge.net>

Always (3)'s now, no (4)'s (not that I'm really sure what that signifies).

Thanks,

Jeff

Signature · 12 lines
"Experience is a good school but the fees are high." Heinrich Heine


-------------------------------------------------------
This SF.net email is sponsored by: IT Product Guide on ITManagersJournal
Use IT products in your business? Tell us what you think of them. Give us
Your Opinions, Get Free ThinkGeek Gift Certificates! Click to find out more
http://productguide.itmanagersjournal.com/guidepromo.tmpl
_______________________________________________
Linux-hotplug-devel mailing list  http://linux-hotplug.sourceforge.net
[email protected]
https://lists.sourceforge.net/lists/listinfo/linux-hotplug-devel
#3 lore raw
In reply to Jeff
Quoted 34 lines · Jeff
Quoted 20 lines · Kay Sievers
Quoted 12 lines · Kay Sievers
Quoted 9 lines · Jeff

Sorry to double post but thought with the more verbose debugging this might help you more:

Oct 14 16:04:00 [wait_for_sysfs] either wait_for_sysfs (udev 038) needs 

an update
to handle the device '/class/vc/vcs2' properly (4) or the sysfs-support of your de
vice's driver needs to be fixed, please report to <[email protected]
eforge.net>

Quoted 4 lines

Seems like you have the /etc/hotplug.d/default/00-wait_for_sysfs.hotplug symlink still installed. Removing this will cut the messages to the half but not solve the problem, sorry. We are working on it, but currently have absolutely no idea what's going wrong here.

Quoted 9 lines

Sorry for the confusion. It seems that the kernel emits two events for every device, which is wrong. It's not a second symlink as I pointed out to you first.

Thanks,
Kay

Just an update-039 fixes the majority of the vcs messages. I've rebooted a few times and now only get 1-3 of the messages. Example:

Oct 15 21:46:28 [wait_for_sysfs] either wait_for_sysfs (udev 039) needs 
Quoted 8 lines

an updat
e to handle the device '/class/vc/vcs8' properly (3) or the sysfs-support of you
r device's driver needs to be fixed, please report to <linux-hotplug-devel@lists
.sourceforge.net>

Always (3)'s now, no (4)'s (not that I'm really sure what that signifies).

Ok, we need to cover the case, we can open the device but can't read anything, cause it's gone in the meantime.

Here is a fix and it replaces the magic numbers with meaningful text.

Kay

===== wait_for_sysfs.c 1.20 vs edited =====

wait_for_sysfs.c +23 -23
@@ -56,7 +56,8 @@
 #define WAIT_LOOP_PER_SECOND		20
 
 /* wait for specific file to show up, normally the "dev"-file */
-static int wait_for_class_device_attributes(struct sysfs_class_device *class_dev)
+static int wait_for_class_device_attributes(struct sysfs_class_device *class_dev,
+					    const char **error)
 {
 	static struct class_file {
 		char *subsystem;
@@ -103,7 +104,8 @@
 		struct stat stats;
 
 		if (stat(class_dev->path, &stats) == -1) {
-			dbg("oops, the directory '%s' just disappeared.", class_dev->path);
+			dbg("we've opened the device '%s' but now it disappeared", class_dev->path);
+			*error = "device directory unavailable";
 			return -ENODEV;
 		}
 
@@ -116,6 +118,7 @@
 	}
 
 	dbg("error: getting class '%s' specific file '%s'", class_dev->classname, file);
+	*error = "class specific file unavailable";
 	return -ENOENT;
 }
 
@@ -226,7 +229,8 @@
 }
 
 /* wait for the bus and for a bus specific file to show up */
-static int wait_for_bus_device(struct sysfs_device *device_dev)
+static int wait_for_bus_device(struct sysfs_device *device_dev,
+			       const char **error)
 {
 	static struct bus_file {
 		char *bus;
@@ -256,6 +260,7 @@
 	}
 	if (loop == 0) {
 		dbg("error: getting /bus-device link");
+		*error = "no /bus-device link";
 		return -1;
 	}
 	dbg("/bus-device link found for bus '%s'", device_dev->bus);
@@ -276,6 +281,7 @@
 			}
 		}
 		if (found == 0) {
+			*error = "unknown bus";
 			info("error: unknown bus, please report to "
 			     "<[email protected]> '%s'", device_dev->bus);
 			return -1;
@@ -284,6 +290,7 @@
 	}
 
 	dbg("error: getting bus '%s' specific file '%s'", device_dev->bus, busfile->file);
+	*error = "bus specific file unavailable";
 	return -1;
 }
 
@@ -299,7 +306,7 @@
 	struct sysfs_device *device_dev = NULL;
 	int loop;
 	int retval;
-	int rc = 0;
+	const char *error = NULL;
 
 	init_logging("wait_for_sysfs");
 
@@ -345,22 +352,19 @@
 		}
 		if (class_dev == NULL) {
 			dbg("error: getting class_device");
-			rc = 3;
+			error = "device unavailable";
 			goto exit;
 		}
 		dbg("class_device opened '%s'", filename);
 
-		retval = wait_for_class_device_attributes(class_dev);
-		if (retval == -ENODEV)
+		retval = wait_for_class_device_attributes(class_dev, &error);
+		if (retval != 0)
 			goto exit_class;
-		if (retval != 0) {
-			rc = 4;
-			goto exit_class;
-		}
 
 		/* skip devices without /device-link */
 		if (class_device_expect_no_device_link(class_dev)) {
 			dbg("no device symlink expected for '%s', ", class_dev->name);
+			error = "no device symlink";
 			goto exit_class;
 		}
 
@@ -384,8 +388,7 @@
 			usleep(1000 * 1000 / WAIT_LOOP_PER_SECOND);
 		}
 		if (device_dev == NULL) {
-			dbg("error: getting /device-device");
-			rc = 5;
+			error = "error: /device-device symlink";
 			goto exit_class;
 		}
 		dbg("device symlink found pointing to '%s'", device_dev->path);
@@ -394,8 +397,7 @@
 		if (class_device_expect_no_bus(class_dev)) {
 			dbg("no bus device expected for '%s', ", class_dev->classname);
 		} else {
-			if (wait_for_bus_device(device_dev) != 0)
-				rc = 6;
+			wait_for_bus_device(device_dev, &error);
 		}
 
 exit_class:
@@ -415,15 +417,13 @@
 			usleep(1000 * 1000 / WAIT_LOOP_PER_SECOND);
 		}
 		if (device_dev == NULL) {
-			dbg("error: getting /device-device");
-			rc = 7;
+			error = "error: opening /device-device";
 			goto exit;
 		}
 		dbg("device_device opened '%s'", filename);
 
 		/* wait for the bus value */
-		if (wait_for_bus_device(device_dev) != 0)
-			rc = 8;
+		wait_for_bus_device(device_dev, &error);
 
 		sysfs_close_device(device_dev);
 
@@ -432,13 +432,13 @@
 	}
 
 exit:
-	if (rc == 0)
+	if (error == NULL)
 		dbg("result: waiting for sysfs successful '%s'", devpath);
 	else
 		info("either wait_for_sysfs (udev %s) needs an update to handle the device '%s' "
-		     "properly (%d) or the sysfs-support of your device's driver needs to be fixed, "
+		     "properly (%s) or the sysfs-support of your device's driver needs to be fixed, "
 		     "please report to <[email protected]>",
-		     UDEV_VERSION, devpath, rc);
+		     UDEV_VERSION, devpath, error);
 
-	return rc;
+	return 3;
 }
#4 lore raw
In reply to Jeff
Quoted 42 lines · Kay Sievers
Quoted 41 lines · Jeff
Quoted 20 lines · Kay Sievers
Quoted 12 lines · Kay Sievers
Quoted 9 lines · Jeff

Sorry to double post but thought with the more verbose debugging this might help you more:

Oct 14 16:04:00 [wait_for_sysfs] either wait_for_sysfs (udev 038) needs 

an update
to handle the device '/class/vc/vcs2' properly (4) or the sysfs-support of your de
vice's driver needs to be fixed, please report to <[email protected]
eforge.net>

Quoted 4 lines

Seems like you have the /etc/hotplug.d/default/00-wait_for_sysfs.hotplug symlink still installed. Removing this will cut the messages to the half but not solve the problem, sorry. We are working on it, but currently have absolutely no idea what's going wrong here.

Quoted 9 lines

Sorry for the confusion. It seems that the kernel emits two events for every device, which is wrong. It's not a second symlink as I pointed out to you first.

Thanks,
Kay

Just an update-039 fixes the majority of the vcs messages. I've rebooted a few times and now only get 1-3 of the messages. Example:

Oct 15 21:46:28 [wait_for_sysfs] either wait_for_sysfs (udev 039) needs 

an updat
e to handle the device '/class/vc/vcs8' properly (3) or the sysfs-support of you
r device's driver needs to be fixed, please report to <linux-hotplug-devel@lists
.sourceforge.net>

Quoted 6 lines
Quoted 1 line

Always (3)'s now, no (4)'s (not that I'm really sure what that signifies).

Ok, we need to cover the case, we can open the device but can't read anything, cause it's gone in the meantime.

Here is a fix and it replaces the magic numbers with meaningful text.

Here is a better version. We return successful in the case, that the advertised device does not appear within the timeout or goes completely away while waiting for the attributes. All magic numbers should be readable as a string now.

This hopefully fixes the last vc errors.

Thanks,
Kay

===== wait_for_sysfs.c 1.20 vs edited =====

wait_for_sysfs.c +29 -34
@@ -56,7 +56,8 @@ void log_message(int level, const char *
 #define WAIT_LOOP_PER_SECOND		20
 
 /* wait for specific file to show up, normally the "dev"-file */
-static int wait_for_class_device_attributes(struct sysfs_class_device *class_dev)
+static int wait_for_class_device_attributes(struct sysfs_class_device *class_dev,
+					    const char **error)
 {
 	static struct class_file {
 		char *subsystem;
@@ -103,11 +104,11 @@ static int wait_for_class_device_attribu
 		struct stat stats;
 
 		if (stat(class_dev->path, &stats) == -1) {
-			dbg("oops, the directory '%s' just disappeared.", class_dev->path);
+			dbg("'%s' now disappeared (probably remove has beaten us)", class_dev->path);
 			return -ENODEV;
 		}
 
-		if (stat(filename, &stats) == 0) {	
+		if (stat(filename, &stats) == 0) {
 			dbg("class '%s' specific file '%s' found", class_dev->classname, file);
 			return 0;
 		}
@@ -116,6 +117,7 @@ static int wait_for_class_device_attribu
 	}
 
 	dbg("error: getting class '%s' specific file '%s'", class_dev->classname, file);
+	*error = "class specific file unavailable";
 	return -ENOENT;
 }
 
@@ -226,7 +228,8 @@ static int class_device_expect_no_bus(st
 }
 
 /* wait for the bus and for a bus specific file to show up */
-static int wait_for_bus_device(struct sysfs_device *device_dev)
+static int wait_for_bus_device(struct sysfs_device *device_dev,
+			       const char **error)
 {
 	static struct bus_file {
 		char *bus;
@@ -246,7 +249,7 @@ static int wait_for_bus_device(struct sy
 	struct bus_file *busfile;
 	int loop;
 
-	/* wait for the /bus-device link to the /device-device */
+	/* wait for the /bus-device link to the /devices-device */
 	loop = WAIT_MAX_SECONDS * WAIT_LOOP_PER_SECOND;
 	while (--loop) {
 		if (sysfs_get_device_bus(device_dev) == 0)
@@ -256,6 +259,7 @@ static int wait_for_bus_device(struct sy
 	}
 	if (loop == 0) {
 		dbg("error: getting /bus-device link");
+		*error = "no /bus-device link";
 		return -1;
 	}
 	dbg("/bus-device link found for bus '%s'", device_dev->bus);
@@ -276,6 +280,7 @@ static int wait_for_bus_device(struct sy
 			}
 		}
 		if (found == 0) {
+			*error = "unknown bus";
 			info("error: unknown bus, please report to "
 			     "<[email protected]> '%s'", device_dev->bus);
 			return -1;
@@ -284,6 +289,7 @@ static int wait_for_bus_device(struct sy
 	}
 
 	dbg("error: getting bus '%s' specific file '%s'", device_dev->bus, busfile->file);
+	*error = "bus specific file unavailable";
 	return -1;
 }
 
@@ -298,8 +304,7 @@ int main(int argc, char *argv[], char *e
 	struct sysfs_class_device *class_dev_parent;
 	struct sysfs_device *device_dev = NULL;
 	int loop;
-	int retval;
-	int rc = 0;
+	const char *error = NULL;
 
 	init_logging("wait_for_sysfs");
 
@@ -344,21 +349,15 @@ int main(int argc, char *argv[], char *e
 			usleep(1000 * 1000 / WAIT_LOOP_PER_SECOND);
 		}
 		if (class_dev == NULL) {
-			dbg("error: getting class_device");
-			rc = 3;
+			dbg("error: class_device unavailable (probably remove has beaten us)");
 			goto exit;
 		}
 		dbg("class_device opened '%s'", filename);
 
-		retval = wait_for_class_device_attributes(class_dev);
-		if (retval == -ENODEV)
+		if (wait_for_class_device_attributes(class_dev, &error) != 0)
 			goto exit_class;
-		if (retval != 0) {
-			rc = 4;
-			goto exit_class;
-		}
 
-		/* skip devices without /device-link */
+		/* skip devices without devices-link */
 		if (class_device_expect_no_device_link(class_dev)) {
 			dbg("no device symlink expected for '%s', ", class_dev->name);
 			goto exit_class;
@@ -369,8 +368,8 @@ int main(int argc, char *argv[], char *e
 		if (class_dev_parent)
 			dbg("looking at parent device for device link '%s'", class_dev_parent->path);
 
-		/* wait for the symlink to the /device-device */
-		dbg("waiting for symlink to /device-device");
+		/* wait for the symlink to the devices-device */
+		dbg("waiting for symlink to devices-device");
 		loop = WAIT_MAX_SECONDS * WAIT_LOOP_PER_SECOND;
 		while (--loop) {
 			if (class_dev_parent)
@@ -384,19 +383,17 @@ int main(int argc, char *argv[], char *e
 			usleep(1000 * 1000 / WAIT_LOOP_PER_SECOND);
 		}
 		if (device_dev == NULL) {
-			dbg("error: getting /device-device");
-			rc = 5;
+			dbg(" error: no devices-device symlink found");
+			error = "no device symlink";
 			goto exit_class;
 		}
 		dbg("device symlink found pointing to '%s'", device_dev->path);
 
 		/* wait for the bus value */
-		if (class_device_expect_no_bus(class_dev)) {
+		if (class_device_expect_no_bus(class_dev))
 			dbg("no bus device expected for '%s', ", class_dev->classname);
-		} else {
-			if (wait_for_bus_device(device_dev) != 0)
-				rc = 6;
-		}
+		else
+			wait_for_bus_device(device_dev, &error);
 
 exit_class:
 		sysfs_close_class_device(class_dev);
@@ -415,15 +412,13 @@ exit_class:
 			usleep(1000 * 1000 / WAIT_LOOP_PER_SECOND);
 		}
 		if (device_dev == NULL) {
-			dbg("error: getting /device-device");
-			rc = 7;
+			error = "devices-device unavailable";
 			goto exit;
 		}
-		dbg("device_device opened '%s'", filename);
+		dbg("devices-device opened '%s'", filename);
 
 		/* wait for the bus value */
-		if (wait_for_bus_device(device_dev) != 0)
-			rc = 8;
+		wait_for_bus_device(device_dev, &error);
 
 		sysfs_close_device(device_dev);
 
@@ -432,13 +427,13 @@ exit_class:
 	}
 
 exit:
-	if (rc == 0)
+	if (error == NULL)
 		dbg("result: waiting for sysfs successful '%s'", devpath);
 	else
 		info("either wait_for_sysfs (udev %s) needs an update to handle the device '%s' "
-		     "properly (%d) or the sysfs-support of your device's driver needs to be fixed, "
+		     "properly (%s) or the sysfs-support of your device's driver needs to be fixed, "
 		     "please report to <[email protected]>",
-		     UDEV_VERSION, devpath, rc);
+		     UDEV_VERSION, devpath, error);
 
-	return rc;
+	return 3;
 }
author
#5 lore raw
In reply to Jeff
Quoted 62 lines · Kay Sievers
Quoted 47 lines · Kay Sievers
Quoted 45 lines · Jeff
Quoted 22 lines · Kay Sievers
Quoted 13 lines · Kay Sievers
Quoted 9 lines · Jeff

Sorry to double post but thought with the more verbose debugging this might help you more:

Oct 14 16:04:00 [wait_for_sysfs] either wait_for_sysfs (udev 038) needs 

an update
to handle the device '/class/vc/vcs2' properly (4) or the sysfs-support of your de
vice's driver needs to be fixed, please report to <[email protected]
eforge.net>

Quoted 4 lines

Seems like you have the /etc/hotplug.d/default/00-wait_for_sysfs.hotplug symlink still installed. Removing this will cut the messages to the half but not solve the problem, sorry. We are working on it, but currently have absolutely no idea what's going wrong here.

Quoted 9 lines

Sorry for the confusion. It seems that the kernel emits two events for every device, which is wrong. It's not a second symlink as I pointed out to you first.

Thanks,
Kay

Just an update-039 fixes the majority of the vcs messages. I've rebooted a few times and now only get 1-3 of the messages. Example:

Oct 15 21:46:28 [wait_for_sysfs] either wait_for_sysfs (udev 039) needs 

an updat
e to handle the device '/class/vc/vcs8' properly (3) or the sysfs-support of you
r device's driver needs to be fixed, please report to <linux-hotplug-devel@lists
.sourceforge.net>

Quoted 6 lines
Quoted 1 line

Always (3)'s now, no (4)'s (not that I'm really sure what that signifies).

Ok, we need to cover the case, we can open the device but can't read anything, cause it's gone in the meantime.

Here is a fix and it replaces the magic numbers with meaningful text.

Here is a better version. We return successful in the case, that the advertised device does not appear within the timeout or goes completely away while waiting for the attributes. All magic numbers should be readable as a string now.

Quoted 4 lines

This hopefully fixes the last vc errors.

Thanks,
Kay

K, first patch produced a couple of device unavailables & a slew of no device symlinks. Second patch-no messages at all :)

Thank god, if I have to reboot again I'm going to puke.

Thanks,

Jeff

Signature · 12 lines
"Experience is a good school but the fees are high." Heinrich Heine


-------------------------------------------------------
This SF.net email is sponsored by: IT Product Guide on ITManagersJournal
Use IT products in your business? Tell us what you think of them. Give us
Your Opinions, Get Free ThinkGeek Gift Certificates! Click to find out more
http://productguide.itmanagersjournal.com/guidepromo.tmpl
_______________________________________________
Linux-hotplug-devel mailing list  http://linux-hotplug.sourceforge.net
[email protected]
https://lists.sourceforge.net/lists/listinfo/linux-hotplug-devel
#6 lore raw
In reply to Jeff
Quoted 8 lines · Jeff
Quoted 7 lines · Kay Sievers

On Sat, Oct 16, 2004 at 04:40:51AM +0200, Kay Sievers wrote:

Here is a better version. We return successful in the case, that the advertised device does not appear within the timeout or goes completely away while waiting for the attributes. All magic numbers should be readable as a string now.

Quoted 6 lines
Quoted 2 lines

This hopefully fixes the last vc errors.

K, first patch produced a couple of device unavailables & a slew of no device symlinks. Second patch-no messages at all :)

Thank god, if I have to reboot again I'm going to puke.

Nice to hear that we covered all the vc errors now. I think we should apply the same logic to the /devices device wait loops, as they may go with a remove event too.

Here is the 3rd version of the patch :)

Thanks,
Kay

===== wait_for_sysfs.c 1.20 vs edited =====

wait_for_sysfs.c +141 -107
@@ -56,7 +56,8 @@ void log_message(int level, const char *
 #define WAIT_LOOP_PER_SECOND		20
 
 /* wait for specific file to show up, normally the "dev"-file */
-static int wait_for_class_device_attributes(struct sysfs_class_device *class_dev)
+static int wait_for_class_device_attributes(struct sysfs_class_device *class_dev,
+					    const char **error)
 {
 	static struct class_file {
 		char *subsystem;
@@ -77,7 +78,7 @@ static int wait_for_class_device_attribu
 		{ NULL, NULL }
 	};
 	struct class_file *classfile;
-	const char *file = "dev";
+	char *file = "dev";
 	char filename[FILENAME_MAX];
 	int loop;
 
@@ -103,11 +104,11 @@ static int wait_for_class_device_attribu
 		struct stat stats;
 
 		if (stat(class_dev->path, &stats) == -1) {
-			dbg("oops, the directory '%s' just disappeared.", class_dev->path);
+			dbg("'%s' now disappeared (probably remove has beaten us)", class_dev->path);
 			return -ENODEV;
 		}
 
-		if (stat(filename, &stats) == 0) {	
+		if (stat(filename, &stats) == 0) {
 			dbg("class '%s' specific file '%s' found", class_dev->classname, file);
 			return 0;
 		}
@@ -116,6 +117,7 @@ static int wait_for_class_device_attribu
 	}
 
 	dbg("error: getting class '%s' specific file '%s'", class_dev->classname, file);
+	*error = "class specific file unavailable";
 	return -ENOENT;
 }
 
@@ -226,7 +228,8 @@ static int class_device_expect_no_bus(st
 }
 
 /* wait for the bus and for a bus specific file to show up */
-static int wait_for_bus_device(struct sysfs_device *device_dev)
+static int wait_for_bus_device(struct sysfs_device *devices_dev,
+			       const char **error)
 {
 	static struct bus_file {
 		char *bus;
@@ -246,19 +249,20 @@ static int wait_for_bus_device(struct sy
 	struct bus_file *busfile;
 	int loop;
 
-	/* wait for the /bus-device link to the /device-device */
+	/* wait for the bus device link to the devices device */
 	loop = WAIT_MAX_SECONDS * WAIT_LOOP_PER_SECOND;
 	while (--loop) {
-		if (sysfs_get_device_bus(device_dev) == 0)
+		if (sysfs_get_device_bus(devices_dev) == 0)
 			break;
 
 		usleep(1000 * 1000 / WAIT_LOOP_PER_SECOND);
 	}
 	if (loop == 0) {
-		dbg("error: getting /bus-device link");
+		dbg("error: getting bus device link");
+		*error = "no bus device link";
 		return -1;
 	}
-	dbg("/bus-device link found for bus '%s'", device_dev->bus);
+	dbg("bus device link found for bus '%s'", devices_dev->bus);
 
 	/* wait for a bus specific file to show up */
 	loop = WAIT_MAX_SECONDS * WAIT_LOOP_PER_SECOND;
@@ -266,27 +270,115 @@ static int wait_for_bus_device(struct sy
 		int found = 0;
 
 		for (busfile = bus_files; busfile->bus != NULL; busfile++) {
-			if (strcmp(device_dev->bus, busfile->bus) == 0) {
+			if (strcmp(devices_dev->bus, busfile->bus) == 0) {
 				found = 1;
-				dbg("looking at bus '%s' for specific file '%s'", device_dev->bus, busfile->file);
-				if (sysfs_get_device_attr(device_dev, busfile->file) != NULL) {
-					dbg("bus '%s' specific file '%s' found", device_dev->bus, busfile->file);
+				dbg("looking at bus '%s' for specific file '%s'", devices_dev->bus, busfile->file);
+				if (sysfs_get_device_attr(devices_dev, busfile->file) != NULL) {
+					dbg("bus '%s' specific file '%s' found", devices_dev->bus, busfile->file);
 					return 0;
 				}
 			}
 		}
 		if (found == 0) {
+			*error = "unknown bus";
 			info("error: unknown bus, please report to "
-			     "<[email protected]> '%s'", device_dev->bus);
+			     "<[email protected]> '%s'", devices_dev->bus);
 			return -1;
 		}
 		usleep(1000 * 1000 / WAIT_LOOP_PER_SECOND);
 	}
 
-	dbg("error: getting bus '%s' specific file '%s'", device_dev->bus, busfile->file);
+	dbg("error: getting bus '%s' specific file '%s'", devices_dev->bus, busfile->file);
+	*error = "bus specific file unavailable";
 	return -1;
 }
 
+
+static struct sysfs_class_device *open_class_device(const char *path)
+{
+	struct sysfs_class_device *class_dev;
+	int loop;
+
+	loop = WAIT_MAX_SECONDS * WAIT_LOOP_PER_SECOND;
+	while (--loop) {
+		class_dev = sysfs_open_class_device_path(path);
+		if (class_dev)
+			break;
+
+		usleep(1000 * 1000 / WAIT_LOOP_PER_SECOND);
+	}
+
+	return (class_dev);
+}
+
+static int wait_for_class_device(struct sysfs_class_device *class_dev,
+				 const char **error)
+{
+	struct sysfs_class_device *class_dev_parent;
+	struct sysfs_device *devices_dev = NULL;
+	int loop;
+
+	if (wait_for_class_device_attributes(class_dev, error) != 0)
+		return -ENOENT;
+
+	/* skip devices without devices-link */
+	if (class_device_expect_no_device_link(class_dev)) {
+		dbg("no device symlink expected for '%s', ", class_dev->name);
+		return -ENODEV;
+	}
+
+	/* the symlink may be on the parent device */
+	class_dev_parent = sysfs_get_classdev_parent(class_dev);
+	if (class_dev_parent)
+		dbg("looking at parent device for device link '%s'", class_dev_parent->path);
+
+	/* wait for the symlink to the devices device */
+	dbg("waiting for symlink to devices device");
+	loop = WAIT_MAX_SECONDS * WAIT_LOOP_PER_SECOND;
+	while (--loop) {
+		if (class_dev_parent)
+			devices_dev = sysfs_get_classdev_device(class_dev_parent);
+		else
+			devices_dev = sysfs_get_classdev_device(class_dev);
+
+		if (devices_dev)
+			break;
+
+		usleep(1000 * 1000 / WAIT_LOOP_PER_SECOND);
+	}
+	if (!devices_dev) {
+		dbg(" error: no devices device symlink found");
+		*error = "no device symlink";
+		return -ENODEV;
+	}
+	dbg("device symlink found pointing to '%s'", devices_dev->path);
+
+	/* wait for the bus value */
+	if (class_device_expect_no_bus(class_dev)) {
+		dbg("no bus device expected for '%s', ", class_dev->classname);
+		return 0;
+	} else {
+		return wait_for_bus_device(devices_dev, error);
+	}
+}
+
+static struct sysfs_device *open_devices_device(const char *path)
+{
+	struct sysfs_device *devices_dev;
+	int loop;
+
+	loop = WAIT_MAX_SECONDS * WAIT_LOOP_PER_SECOND;
+	while (--loop) {
+		devices_dev = sysfs_open_device_path(path);
+		if (devices_dev)
+			break;
+
+		usleep(1000 * 1000 / WAIT_LOOP_PER_SECOND);
+	}
+
+	return(devices_dev);
+}
+
 int main(int argc, char *argv[], char *envp[])
 {
 	const char *devpath = "";
@@ -295,11 +387,9 @@ int main(int argc, char *argv[], char *e
 	char sysfs_path[SYSFS_PATH_MAX];
 	char filename[SYSFS_PATH_MAX];
 	struct sysfs_class_device *class_dev;
-	struct sysfs_class_device *class_dev_parent;
-	struct sysfs_device *device_dev = NULL;
-	int loop;
-	int retval;
+	struct sysfs_device *devices_dev;
 	int rc = 0;
+	const char *error = NULL;
 
 	init_logging("wait_for_sysfs");
 
@@ -312,133 +402,77 @@ int main(int argc, char *argv[], char *e
 	devpath = getenv ("DEVPATH");
 	if (!devpath) {
 		dbg("error: no DEVPATH");
-		return 1;
+		rc = 1;
+		goto exit;
 	}
 
 	action = getenv ("ACTION");
 	if (!action) {
 		dbg("error: no ACTION");
-		return 1;
+		rc = 1;
+		goto exit;
 	}
 
 	/* we only wait on an add event */
-	if (strcmp(action, "add") != 0)
-		return 0;
+	if (strcmp(action, "add") != 0) {
+		dbg("no add ACTION");
+		goto exit;
+	}
 
 	if (sysfs_get_mnt_path(sysfs_path, SYSFS_PATH_MAX) != 0) {
 		dbg("error: no sysfs path");
-		return 2;
+		rc = 2;
+		goto exit;
 	}
 
 	if ((strncmp(devpath, "/block/", 7) == 0) || (strncmp(devpath, "/class/", 7) == 0)) {
-		/* open the class device we are called for */
 		snprintf(filename, SYSFS_PATH_MAX-1, "%s%s", sysfs_path, devpath);
 		filename[SYSFS_PATH_MAX-1] = '\0';
 
-		loop = WAIT_MAX_SECONDS * WAIT_LOOP_PER_SECOND;
-		while (--loop) {
-			class_dev = sysfs_open_class_device_path(filename);
-			if (class_dev)
-				break;
-
-			usleep(1000 * 1000 / WAIT_LOOP_PER_SECOND);
-		}
-		if (class_dev == NULL) {
-			dbg("error: getting class_device");
-			rc = 3;
+		/* open the class device we are called for */
+		class_dev = open_class_device(filename);
+		if (!class_dev) {
+			dbg("error: class device unavailable (probably remove has beaten us)");
 			goto exit;
 		}
-		dbg("class_device opened '%s'", filename);
-
-		retval = wait_for_class_device_attributes(class_dev);
-		if (retval == -ENODEV)
-			goto exit_class;
-		if (retval != 0) {
-			rc = 4;
-			goto exit_class;
-		}
+		dbg("class device opened '%s'", filename);
 
-		/* skip devices without /device-link */
-		if (class_device_expect_no_device_link(class_dev)) {
-			dbg("no device symlink expected for '%s', ", class_dev->name);
-			goto exit_class;
-		}
-
-		/* the symlink may be on the parent device */
-		class_dev_parent = sysfs_get_classdev_parent(class_dev);
-		if (class_dev_parent)
-			dbg("looking at parent device for device link '%s'", class_dev_parent->path);
-
-		/* wait for the symlink to the /device-device */
-		dbg("waiting for symlink to /device-device");
-		loop = WAIT_MAX_SECONDS * WAIT_LOOP_PER_SECOND;
-		while (--loop) {
-			if (class_dev_parent)
-				device_dev = sysfs_get_classdev_device(class_dev_parent);
-			else
-				device_dev = sysfs_get_classdev_device(class_dev);
-
-			if (device_dev)
-				break;
+		/* wait for the class device with possible physical device and bus */
+		wait_for_class_device(class_dev, &error);
 
-			usleep(1000 * 1000 / WAIT_LOOP_PER_SECOND);
-		}
-		if (device_dev == NULL) {
-			dbg("error: getting /device-device");
-			rc = 5;
-			goto exit_class;
-		}
-		dbg("device symlink found pointing to '%s'", device_dev->path);
-
-		/* wait for the bus value */
-		if (class_device_expect_no_bus(class_dev)) {
-			dbg("no bus device expected for '%s', ", class_dev->classname);
-		} else {
-			if (wait_for_bus_device(device_dev) != 0)
-				rc = 6;
-		}
-
-exit_class:
 		sysfs_close_class_device(class_dev);
 
 	} else if ((strncmp(devpath, "/devices/", 9) == 0)) {
-		/* open the path we are called for */
 		snprintf(filename, SYSFS_PATH_MAX-1, "%s%s", sysfs_path, devpath);
 		filename[SYSFS_PATH_MAX-1] = '\0';
 
-		loop = WAIT_MAX_SECONDS * WAIT_LOOP_PER_SECOND;
-		while (--loop) {
-			device_dev = sysfs_open_device_path(filename);
-			if (device_dev)
-				break;
-
-			usleep(1000 * 1000 / WAIT_LOOP_PER_SECOND);
-		}
-		if (device_dev == NULL) {
-			dbg("error: getting /device-device");
-			rc = 7;
+		/* open the path we are called for */
+		devices_dev = open_devices_device(filename);
+		if (!devices_dev) {
+			dbg("error: devices device unavailable (probably remove has beaten us)");
 			goto exit;
 		}
-		dbg("device_device opened '%s'", filename);
+		dbg("devices device opened '%s'", filename);
 
 		/* wait for the bus value */
-		if (wait_for_bus_device(device_dev) != 0)
-			rc = 8;
+		wait_for_bus_device(devices_dev, &error);
 
-		sysfs_close_device(device_dev);
+		sysfs_close_device(devices_dev);
 
 	} else {
 		dbg("unhandled sysfs path, no need to wait");
 	}
 
 exit:
-	if (rc == 0)
-		dbg("result: waiting for sysfs successful '%s'", devpath);
-	else
+	if (error) {
 		info("either wait_for_sysfs (udev %s) needs an update to handle the device '%s' "
-		     "properly (%d) or the sysfs-support of your device's driver needs to be fixed, "
+		     "properly (%s) or the sysfs-support of your device's driver needs to be fixed, "
 		     "please report to <[email protected]>",
-		     UDEV_VERSION, devpath, rc);
+		     UDEV_VERSION, devpath, error);
+		rc =3;
+	} else {
+		dbg("result: waiting for sysfs successful '%s'", devpath);
+	}
 
-	return rc;
+	exit(rc);
 }
author
#7 lore raw
In reply to Jeff
Quoted 20 lines · Kay Sievers
Quoted 9 lines · Jeff
Quoted 7 lines · Kay Sievers

On Sat, Oct 16, 2004 at 04:40:51AM +0200, Kay Sievers wrote:

Here is a better version. We return successful in the case, that the advertised device does not appear within the timeout or goes completely away while waiting for the attributes. All magic numbers should be readable as a string now.

Quoted 7 lines
Quoted 2 lines

This hopefully fixes the last vc errors.

K, first patch produced a couple of device unavailables & a slew of no device symlinks. Second patch-no messages at all :)

Thank god, if I have to reboot again I'm going to puke.

Quoted 8 lines

Nice to hear that we covered all the vc errors now. I think we should apply the same logic to the /devices device wait loops, as they may go with a remove event too.

Here is the 3rd version of the patch :)

Thanks,
Kay

Thank you, I'll check this out tomorrow. Red Sox are playing now and it's critical :)

Signature · 12 lines
"Experience is a good school but the fees are high." Heinrich Heine


-------------------------------------------------------
This SF.net email is sponsored by: IT Product Guide on ITManagersJournal
Use IT products in your business? Tell us what you think of them. Give us
Your Opinions, Get Free ThinkGeek Gift Certificates! Click to find out more
http://productguide.itmanagersjournal.com/guidepromo.tmpl
_______________________________________________
Linux-hotplug-devel mailing list  http://linux-hotplug.sourceforge.net
[email protected]
https://lists.sourceforge.net/lists/listinfo/linux-hotplug-devel
author
#8 lore raw
In reply to Jeff
Quoted 20 lines · Kay Sievers
Quoted 9 lines · Jeff
Quoted 7 lines · Kay Sievers

On Sat, Oct 16, 2004 at 04:40:51AM +0200, Kay Sievers wrote:

Here is a better version. We return successful in the case, that the advertised device does not appear within the timeout or goes completely away while waiting for the attributes. All magic numbers should be readable as a string now.

Quoted 7 lines
Quoted 2 lines

This hopefully fixes the last vc errors.

K, first patch produced a couple of device unavailables & a slew of no device symlinks. Second patch-no messages at all :)

Thank god, if I have to reboot again I'm going to puke.

Quoted 8 lines

Nice to hear that we covered all the vc errors now. I think we should apply the same logic to the /devices device wait loops, as they may go with a remove event too.

Here is the 3rd version of the patch :)

Thanks,
Kay

Patched w/ v.3 & added the close-syslog patch w/o incident. No more problematic devices. Great work.

Jeff

Signature · 12 lines
"Experience is a good school but the fees are high." Heinrich Heine


-------------------------------------------------------
This SF.net email is sponsored by: IT Product Guide on ITManagersJournal
Use IT products in your business? Tell us what you think of them. Give us
Your Opinions, Get Free ThinkGeek Gift Certificates! Click to find out more
http://productguide.itmanagersjournal.com/guidepromo.tmpl
_______________________________________________
Linux-hotplug-devel mailing list  http://linux-hotplug.sourceforge.net
[email protected]
https://lists.sourceforge.net/lists/listinfo/linux-hotplug-devel
Applied
#9 lore raw
In reply to Jeff
Quoted 14 lines · Kay Sievers
Quoted 13 lines · Jeff
Quoted 9 lines · Kay Sievers

On Sat, Oct 16, 2004 at 04:40:51AM +0200, Kay Sievers wrote:

Here is a better version. We return successful in the case, that the advertised device does not appear within the timeout or goes completely away while waiting for the attributes. All magic numbers should be readable as a string now.

This hopefully fixes the last vc errors.

K, first patch produced a couple of device unavailables & a slew of no device symlinks. Second patch-no messages at all :)

Quoted 7 lines
Quoted 1 line

Thank god, if I have to reboot again I'm going to puke.

Nice to hear that we covered all the vc errors now. I think we should apply the same logic to the /devices device wait loops, as they may go with a remove event too.

Here is the 3rd version of the patch :)

Applied, thanks.

greg k-h

-------------------------------------------------------
This SF.net email is sponsored by: IT Product Guide on ITManagersJournal Use IT products in your business? Tell us what you think of them. Give us Your Opinions, Get Free ThinkGeek Gift Certificates! Click to find out more
http://productguide.itmanagersjournal.com/guidepromo.tmpl
_______________________________________________
Linux-hotplug-devel mailing list http://linux-hotplug.sourceforge.net
[email protected]
https://lists.sourceforge.net/lists/listinfo/linux-hotplug-devel