85 lines
3.3 KiB
Diff
85 lines
3.3 KiB
Diff
From 1df2313e201c39907653a99335b7d21db092fcbc Mon Sep 17 00:00:00 2001
|
|
From: Yu Watanabe <watanabe.yu+github@gmail.com>
|
|
Date: Wed, 1 Sep 2021 09:29:42 +0900
|
|
Subject: [PATCH] udev-node: drop redundant trial of devlink creation
|
|
|
|
Previously, the devlink was created based on the priority saved in udev
|
|
database. So, we needed to reevaluate devlinks after database is saved.
|
|
|
|
But now the priority is stored in the symlink under /run/udev/links, and
|
|
the loop of devlink creation is controlled with the timestamp of the
|
|
directory. So, the double evaluation is not necessary anymore.
|
|
|
|
(cherry picked from commit 7920d0a135fb6a08aa0bfc31e9d0a3f589fe7a1f)
|
|
|
|
Conflict:NA
|
|
Reference:https://github.com/systemd/systemd-stable/commit/1df2313e201c39907653a99335b7d21db092fcbc
|
|
---
|
|
src/udev/udev-event.c | 5 +----
|
|
src/udev/udev-node.c | 12 ++++--------
|
|
2 files changed, 5 insertions(+), 12 deletions(-)
|
|
|
|
diff --git a/src/udev/udev-event.c b/src/udev/udev-event.c
|
|
index 8320e96fe2..56fe0a43a7 100644
|
|
--- a/src/udev/udev-event.c
|
|
+++ b/src/udev/udev-event.c
|
|
@@ -1071,10 +1071,7 @@ int udev_event_execute_rules(
|
|
|
|
device_set_is_initialized(dev);
|
|
|
|
- /* Yes, we run update_devnode() twice, because in the first invocation, that is before update of udev database,
|
|
- * it could happen that two contenders are replacing each other's symlink. Hence we run it again to make sure
|
|
- * symlinks point to devices that claim them with the highest priority. */
|
|
- return update_devnode(event);
|
|
+ return 0;
|
|
}
|
|
|
|
void udev_event_execute_run(UdevEvent *event, usec_t timeout_usec, int timeout_signal) {
|
|
diff --git a/src/udev/udev-node.c b/src/udev/udev-node.c
|
|
index d8edf39aec..52816c72fd 100644
|
|
--- a/src/udev/udev-node.c
|
|
+++ b/src/udev/udev-node.c
|
|
@@ -416,7 +416,7 @@ static int link_update(sd_device *dev, const char *slink_in, bool add) {
|
|
_cleanup_free_ char *slink = NULL, *dirname = NULL;
|
|
const char *slink_name;
|
|
char name_enc[NAME_MAX+1];
|
|
- int i, r, retries;
|
|
+ int r;
|
|
|
|
assert(dev);
|
|
assert(slink_in);
|
|
@@ -443,11 +443,7 @@ static int link_update(sd_device *dev, const char *slink_in, bool add) {
|
|
if (r < 0)
|
|
return r;
|
|
|
|
- /* If the database entry is not written yet we will just do one iteration and possibly wrong symlink
|
|
- * will be fixed in the second invocation. */
|
|
- retries = sd_device_get_is_initialized(dev) > 0 ? LINK_UPDATE_MAX_RETRIES : 1;
|
|
-
|
|
- for (i = 0; i < retries; i++) {
|
|
+ for (unsigned i = 0; i < LINK_UPDATE_MAX_RETRIES; i++) {
|
|
_cleanup_free_ char *target = NULL;
|
|
struct stat st1 = {}, st2 = {};
|
|
|
|
@@ -473,7 +469,7 @@ static int link_update(sd_device *dev, const char *slink_in, bool add) {
|
|
log_device_debug_errno(dev, errno, "Failed to remove '%s', ignoring: %m", slink);
|
|
|
|
(void) rmdir_parents(slink, "/dev");
|
|
- break;
|
|
+ return 0;
|
|
}
|
|
|
|
r = node_symlink(dev, target, slink);
|
|
@@ -488,7 +484,7 @@ static int link_update(sd_device *dev, const char *slink_in, bool add) {
|
|
return 0;
|
|
}
|
|
|
|
- return i < LINK_UPDATE_MAX_RETRIES ? 0 : -ELOOP;
|
|
+ return -ELOOP;
|
|
}
|
|
|
|
static int device_get_devpath_by_devnum(sd_device *dev, char **ret) {
|
|
--
|
|
2.33.0
|
|
|