chiark / gitweb /
volume_id: fix UUID raw buffer usage
[elogind.git] / udev_node.c
index 556a442a333709a08593a4f4c2ded038942a8e5c..bd58a6c485d9ddc6128bd4d31079ec54ba63fc6e 100644 (file)
@@ -218,14 +218,16 @@ static int update_link(struct udevice *udev, const char *name)
                if (strcmp(udev->dev->devpath, device->name) == 0) {
                        info("compare (our own) priority of '%s' %i >= %i",
                             udev->dev->devpath, udev->link_priority, priority);
-                       if (target[0] == '\0' || udev->link_priority >= priority) {
+                       if (strcmp(udev->name, name) == 0) {
+                               info("'%s' is our device node, database inconsistent, skip link update", udev->name);
+                       } else if (target[0] == '\0' || udev->link_priority >= priority) {
                                priority = udev->link_priority;
                                strlcpy(target, udev->name, sizeof(target));
                        }
                        continue;
                }
 
-               /* or something else, then read priority from database */
+               /* another device, read priority from database */
                udev_db = udev_device_init(NULL);
                if (udev_db == NULL)
                        continue;
@@ -406,8 +408,8 @@ int udev_node_remove(struct udevice *udev)
        strlcat(filename, "/", sizeof(filename));
        strlcat(filename, udev->name, sizeof(filename));
        if (stat(filename, &stats) != 0) {
-               dbg("device node '%s' not found", filename);
-               return -1;
+               info("device node '%s' not found", filename);
+               return 0;
        }
        if (udev->devt && stats.st_rdev != udev->devt) {
                info("device node '%s' points to a different device, skip removal", filename);