chiark / gitweb /
[PATCH] udevd: serialization of the event sequence of a chain of devices
[elogind.git] / udev_sysfs.c
index a25223ef461248242e394a7dc1b57fcdc366c36e..ac8e4c10600d26c0b47d444ec93dc7244ea3a4a2 100644 (file)
@@ -31,7 +31,7 @@
 #include "libsysfs/sysfs/libsysfs.h"
 #include "udev_version.h"
 #include "udev_sysfs.h"
-#include "udev_lib.h"
+#include "udev_utils.h"
 #include "logging.h"
 
 /* list of subsystem specific files, NULL if there is no file to wait for */
@@ -51,6 +51,8 @@ static const struct subsystem_file {
        { .subsystem = "ieee1394",      .file = NULL },
        { .subsystem = "ieee1394_host", .file = NULL },
        { .subsystem = "ieee1394_node", .file = NULL },
+       { .subsystem = "fc_transport",  .file = "port_id" },
+       { .subsystem = "fc_host",       .file = "port_id" },
        { NULL, NULL }
 };
 
@@ -170,9 +172,12 @@ static int class_device_expect_no_device_link(struct sysfs_class_device *class_d
                { .subsystem = "net",           .device = "bnep" },
                { .subsystem = "net",           .device = "vmnet" },
                { .subsystem = "net",           .device = "ippp" },
+               { .subsystem = "net",           .device = "nlv" },
+               { .subsystem = "net",           .device = "atml" },
                { .subsystem = "ppp",           .device = NULL },
                { .subsystem = "sound",         .device = NULL },
                { .subsystem = "printer",       .device = "lp" },
+               { .subsystem = "ppdev",         .device = NULL },
                { .subsystem = "nvidia",        .device = NULL },
                { .subsystem = "video4linux",   .device = "vbi" },
                { .subsystem = "dvb",           .device = NULL },
@@ -274,11 +279,12 @@ int wait_for_devices_device(struct sysfs_device *devices_dev,
                { .bus = "ide",         .file = "detach_state" },
                { .bus = "pci",         .file = "vendor" },
                { .bus = "platform",    .file = "detach_state" },
+               { .bus = "pcmcia",      .file = "detach_state" },
                { .bus = "i2c",         .file = "detach_state" },
                { .bus = "ieee1394",    .file = "node_count" },
                { .bus = "ieee1394",    .file = "nodeid" },
                { .bus = "ieee1394",    .file = "address" },
-               { .bus = "bttv-sub",    .file = "detach_state" },
+               { .bus = "bttv-sub",    .file = NULL },
                { .bus = "pnp",         .file = "detach_state" },
                { .bus = "eisa",        .file = "detach_state" },
                { .bus = "pseudo",      .file = "detach_state" },
@@ -338,6 +344,11 @@ int wait_for_devices_device(struct sysfs_device *devices_dev,
                                char filename[SYSFS_PATH_MAX];
                                struct stat stats;
 
+                               if (devicefile->file == NULL) {
+                                       dbg("bus '%s' has no file to wait for", devices_dev->bus);
+                                       return 0;
+                               }
+
                                found_bus_type = 1;
                                snprintf(filename, SYSFS_PATH_MAX-1, "%s/%s", devices_dev->path, devicefile->file);
                                dbg("looking at bus '%s' device for specific file '%s'", devices_dev->bus, filename);