]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
udev: update devlink with the newer device node even when priority is equivalent
authorYu Watanabe <watanabe.yu+github@gmail.com>
Mon, 30 Oct 2023 04:31:23 +0000 (13:31 +0900)
committerYu Watanabe <watanabe.yu+github@gmail.com>
Wed, 1 Nov 2023 10:46:03 +0000 (19:46 +0900)
Several udev rules depends on the previous behavior, i.e. that udev
replaces the devlink with the newer device node when the priority is
equivalent. Let's relax the optimization done by
331aa7aa15ee5dd12b369b276f575d521435eb52.

Follow-up for 331aa7aa15ee5dd12b369b276f575d521435eb52.

Note, the offending commit drops O(N) of file reads per uevent, and this
commit does not change the computational order. So, hopefully the
performance impact of this change is small enough.

Fixes #28141.

src/udev/udev-node.c

index 6ba38087dcfaee2416707e2d7768d1d25cefa3a9..e12c26ce5a6c9b95a5aff49486d9527c8b5c1f7b 100644 (file)
@@ -467,13 +467,13 @@ static int link_update(sd_device *dev, const char *slink, bool add) {
                                 /* The devlink priority is downgraded. Another device may have a higher
                                  * priority now. Let's find the device node with the highest priority. */
                         } else {
-                                if (current_prio >= prio)
-                                        /* The devlink with equal or higher priority already exists and is
-                                         * owned by another device. Hence, it is not necessary to recreate it. */
+                                if (current_prio > prio)
+                                        /* The devlink with a higher priority already exists and is owned by
+                                         * another device. Hence, it is not necessary to recreate it. */
                                         return 0;
 
-                                /* This device has a higher priority than the current. Let's create the
-                                 * devlink to our device node. */
+                                /* This device has the equal or a higher priority than the current. Let's
+                                 * create the devlink to our device node. */
                                 return node_symlink(dev, NULL, slink);
                         }