* Re: wait_for_sysfs messages (more debugging info)
2004-10-14 23:21 wait_for_sysfs messages (more debugging info) Jeff
@ 2004-10-15 2:53 ` Jesse Stockall
2004-10-16 2:00 ` Jeff
` (7 subsequent siblings)
8 siblings, 0 replies; 10+ messages in thread
From: Jesse Stockall @ 2004-10-15 2:53 UTC (permalink / raw)
To: linux-hotplug
On Thu, 2004-10-14 at 19:21, Jeff wrote:
> 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
> <linux-hotplug-devel@lists.sourc
> eforge.net>
<!-- snip -->
> 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
> <linux-hotplug-devel@lists.sou
> rceforge.net>
>
I get these with 2.6.9-rc4 and udev 038
> 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
Linux-hotplug-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/linux-hotplug-devel
^ permalink raw reply [flat|nested] 10+ messages in thread* Re: wait_for_sysfs messages (more debugging info)
2004-10-14 23:21 wait_for_sysfs messages (more debugging info) Jeff
2004-10-15 2:53 ` Jesse Stockall
@ 2004-10-16 2:00 ` Jeff
2004-10-16 2:40 ` Kay Sievers
` (6 subsequent siblings)
8 siblings, 0 replies; 10+ messages in thread
From: Jeff @ 2004-10-16 2:00 UTC (permalink / raw)
To: linux-hotplug
Kay Sievers wrote:
> On Fri, 2004-10-15 at 01:42 +0200, Kay Sievers wrote:
>
>>On Thu, Oct 14, 2004 at 07:21:18PM -0400, Jeff wrote:
>>
>>>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
>>><linux-hotplug-devel@lists.sourc
>>>eforge.net>
>>
>>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.
>
>
> 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
--
"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
Linux-hotplug-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/linux-hotplug-devel
^ permalink raw reply [flat|nested] 10+ messages in thread* Re: wait_for_sysfs messages (more debugging info)
2004-10-14 23:21 wait_for_sysfs messages (more debugging info) Jeff
2004-10-15 2:53 ` Jesse Stockall
2004-10-16 2:00 ` Jeff
@ 2004-10-16 2:40 ` Kay Sievers
2004-10-16 16:26 ` Kay Sievers
` (5 subsequent siblings)
8 siblings, 0 replies; 10+ messages in thread
From: Kay Sievers @ 2004-10-16 2:40 UTC (permalink / raw)
To: linux-hotplug
[-- Attachment #1: Type: text/plain, Size: 1781 bytes --]
On Fri, Oct 15, 2004 at 10:00:47PM -0400, Jeff wrote:
> Kay Sievers wrote:
> >On Fri, 2004-10-15 at 01:42 +0200, Kay Sievers wrote:
> >
> >>On Thu, Oct 14, 2004 at 07:21:18PM -0400, Jeff wrote:
> >>
> >>>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
> >>><linux-hotplug-devel@lists.sourc
> >>>eforge.net>
> >>
> >>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.
> >
> >
> >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>
>
> 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
[-- Attachment #2: wait-error-log.patch --]
[-- Type: text/plain, Size: 4349 bytes --]
===== wait_for_sysfs.c 1.20 vs edited =====
--- 1.20/wait_for_sysfs.c 2004-10-15 23:54:11 +02:00
+++ edited/wait_for_sysfs.c 2004-10-16 04:36:42 +02:00
@@ -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 "
"<linux-hotplug-devel@lists.sourceforge.net> '%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 <linux-hotplug-devel@lists.sourceforge.net>",
- UDEV_VERSION, devpath, rc);
+ UDEV_VERSION, devpath, error);
- return rc;
+ return 3;
}
^ permalink raw reply [flat|nested] 10+ messages in thread* Re: wait_for_sysfs messages (more debugging info)
2004-10-14 23:21 wait_for_sysfs messages (more debugging info) Jeff
` (2 preceding siblings ...)
2004-10-16 2:40 ` Kay Sievers
@ 2004-10-16 16:26 ` Kay Sievers
2004-10-16 18:48 ` Jeff
` (4 subsequent siblings)
8 siblings, 0 replies; 10+ messages in thread
From: Kay Sievers @ 2004-10-16 16:26 UTC (permalink / raw)
To: linux-hotplug
[-- Attachment #1: Type: text/plain, Size: 2223 bytes --]
On Sat, Oct 16, 2004 at 04:40:51AM +0200, Kay Sievers wrote:
> On Fri, Oct 15, 2004 at 10:00:47PM -0400, Jeff wrote:
> > Kay Sievers wrote:
> > >On Fri, 2004-10-15 at 01:42 +0200, Kay Sievers wrote:
> > >
> > >>On Thu, Oct 14, 2004 at 07:21:18PM -0400, Jeff wrote:
> > >>
> > >>>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
> > >>><linux-hotplug-devel@lists.sourc
> > >>>eforge.net>
> > >>
> > >>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.
> > >
> > >
> > >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>
> >
> > 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
[-- Attachment #2: wait-error-log-02.patch --]
[-- Type: text/plain, Size: 6036 bytes --]
===== wait_for_sysfs.c 1.20 vs edited =====
--- 1.20/wait_for_sysfs.c 2004-10-15 23:54:11 +02:00
+++ edited/wait_for_sysfs.c 2004-10-16 18:20:23 +02:00
@@ -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 "
"<linux-hotplug-devel@lists.sourceforge.net> '%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 <linux-hotplug-devel@lists.sourceforge.net>",
- UDEV_VERSION, devpath, rc);
+ UDEV_VERSION, devpath, error);
- return rc;
+ return 3;
}
^ permalink raw reply [flat|nested] 10+ messages in thread* Re: wait_for_sysfs messages (more debugging info)
2004-10-14 23:21 wait_for_sysfs messages (more debugging info) Jeff
` (3 preceding siblings ...)
2004-10-16 16:26 ` Kay Sievers
@ 2004-10-16 18:48 ` Jeff
2004-10-17 0:45 ` Kay Sievers
` (3 subsequent siblings)
8 siblings, 0 replies; 10+ messages in thread
From: Jeff @ 2004-10-16 18:48 UTC (permalink / raw)
To: linux-hotplug
Kay Sievers wrote:
> On Sat, Oct 16, 2004 at 04:40:51AM +0200, Kay Sievers wrote:
>
>>On Fri, Oct 15, 2004 at 10:00:47PM -0400, Jeff wrote:
>>
>>>Kay Sievers wrote:
>>>
>>>>On Fri, 2004-10-15 at 01:42 +0200, Kay Sievers wrote:
>>>>
>>>>
>>>>>On Thu, Oct 14, 2004 at 07:21:18PM -0400, Jeff wrote:
>>>>>
>>>>>
>>>>>>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
>>>>>><linux-hotplug-devel@lists.sourc
>>>>>>eforge.net>
>>>>>
>>>>>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.
>>>>
>>>>
>>>>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>
>>>
>>>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
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
--
"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
Linux-hotplug-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/linux-hotplug-devel
^ permalink raw reply [flat|nested] 10+ messages in thread* Re: wait_for_sysfs messages (more debugging info)
2004-10-14 23:21 wait_for_sysfs messages (more debugging info) Jeff
` (4 preceding siblings ...)
2004-10-16 18:48 ` Jeff
@ 2004-10-17 0:45 ` Kay Sievers
2004-10-17 1:55 ` Jeff
` (2 subsequent siblings)
8 siblings, 0 replies; 10+ messages in thread
From: Kay Sievers @ 2004-10-17 0:45 UTC (permalink / raw)
To: linux-hotplug
[-- Attachment #1: Type: text/plain, Size: 851 bytes --]
On Sat, Oct 16, 2004 at 02:48:42PM -0400, Jeff wrote:
> Kay Sievers wrote:
> >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 :)
>
> 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
[-- Attachment #2: wait-error-log-03.patch --]
[-- Type: text/plain, Size: 11440 bytes --]
===== wait_for_sysfs.c 1.20 vs edited =====
--- 1.20/wait_for_sysfs.c 2004-10-15 23:54:11 +02:00
+++ edited/wait_for_sysfs.c 2004-10-17 01:34:27 +02:00
@@ -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 "
- "<linux-hotplug-devel@lists.sourceforge.net> '%s'", device_dev->bus);
+ "<linux-hotplug-devel@lists.sourceforge.net> '%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 <linux-hotplug-devel@lists.sourceforge.net>",
- UDEV_VERSION, devpath, rc);
+ UDEV_VERSION, devpath, error);
+ rc =3;
+ } else {
+ dbg("result: waiting for sysfs successful '%s'", devpath);
+ }
- return rc;
+ exit(rc);
}
^ permalink raw reply [flat|nested] 10+ messages in thread* Re: wait_for_sysfs messages (more debugging info)
2004-10-14 23:21 wait_for_sysfs messages (more debugging info) Jeff
` (5 preceding siblings ...)
2004-10-17 0:45 ` Kay Sievers
@ 2004-10-17 1:55 ` Jeff
2004-10-17 14:04 ` Jeff
2004-10-18 17:17 ` Greg KH
8 siblings, 0 replies; 10+ messages in thread
From: Jeff @ 2004-10-17 1:55 UTC (permalink / raw)
To: linux-hotplug
Kay Sievers wrote:
> On Sat, Oct 16, 2004 at 02:48:42PM -0400, Jeff wrote:
>
>>Kay Sievers wrote:
>>
>>>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 :)
>>
>>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
Thank you, I'll check this out tomorrow. Red Sox are playing now and
it's critical :)
--
"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
Linux-hotplug-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/linux-hotplug-devel
^ permalink raw reply [flat|nested] 10+ messages in thread* Re: wait_for_sysfs messages (more debugging info)
2004-10-14 23:21 wait_for_sysfs messages (more debugging info) Jeff
` (6 preceding siblings ...)
2004-10-17 1:55 ` Jeff
@ 2004-10-17 14:04 ` Jeff
2004-10-18 17:17 ` Greg KH
8 siblings, 0 replies; 10+ messages in thread
From: Jeff @ 2004-10-17 14:04 UTC (permalink / raw)
To: linux-hotplug
Kay Sievers wrote:
> On Sat, Oct 16, 2004 at 02:48:42PM -0400, Jeff wrote:
>
>>Kay Sievers wrote:
>>
>>>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 :)
>>
>>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
Patched w/ v.3 & added the close-syslog patch w/o incident.
No more problematic devices. Great work.
Jeff
--
"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
Linux-hotplug-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/linux-hotplug-devel
^ permalink raw reply [flat|nested] 10+ messages in thread* Re: wait_for_sysfs messages (more debugging info)
2004-10-14 23:21 wait_for_sysfs messages (more debugging info) Jeff
` (7 preceding siblings ...)
2004-10-17 14:04 ` Jeff
@ 2004-10-18 17:17 ` Greg KH
8 siblings, 0 replies; 10+ messages in thread
From: Greg KH @ 2004-10-18 17:17 UTC (permalink / raw)
To: linux-hotplug
On Sun, Oct 17, 2004 at 02:45:17AM +0200, Kay Sievers wrote:
> On Sat, Oct 16, 2004 at 02:48:42PM -0400, Jeff wrote:
> > Kay Sievers wrote:
> > >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 :)
> >
> > 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
Linux-hotplug-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/linux-hotplug-devel
^ permalink raw reply [flat|nested] 10+ messages in thread