wait-online: fix handling of unmanaged state
Signed-off-by: zhaoxiaohu <zhaoxiaohu@kuaishou.com>
This commit is contained in:
parent
bca5172fa6
commit
fa2f7d28fc
@ -0,0 +1,75 @@
|
|||||||
|
From cd7fcda54333dc95116a434cffc591f21edddbb2 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Yu Watanabe <watanabe.yu+github@gmail.com>
|
||||||
|
Date: Wed, 26 Jan 2022 16:48:08 +0900
|
||||||
|
Subject: [PATCH] wait-online: make manager_link_is_online() return 0 when in
|
||||||
|
unmanaged state
|
||||||
|
|
||||||
|
Previously, even if a link is in unmanaged state, the function may
|
||||||
|
returns positive value. So, even if all managed links are in the configured
|
||||||
|
sate but do not satisfy the online criteria, e.g., IPv4 address state,
|
||||||
|
then wait-online finishes with positive value.
|
||||||
|
|
||||||
|
This makes the function always return 0 for unmanaged state. So, at
|
||||||
|
least one managed link must satisfies the online criteria.
|
||||||
|
|
||||||
|
This also adds more comments and debugging logs.
|
||||||
|
|
||||||
|
Fixes #22246.
|
||||||
|
|
||||||
|
Reference: https://github.com/systemd/systemd/pull/22249/commits/cd7fcda54333dc95116a434cffc591f21edddbb2
|
||||||
|
|
||||||
|
Signed-off-by: zhaoxiaohu <zhaoxiaohu@kuaishou.com>
|
||||||
|
Signed-off-by: yuwang <yuwang@kuaishou.com>
|
||||||
|
---
|
||||||
|
src/network/wait-online/manager.c | 25 +++++++++++++++++++++----
|
||||||
|
1 file changed, 21 insertions(+), 4 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/src/network/wait-online/manager.c b/src/network/wait-online/manager.c
|
||||||
|
index d8cf233..17b7475 100644
|
||||||
|
--- a/src/network/wait-online/manager.c
|
||||||
|
+++ b/src/network/wait-online/manager.c
|
||||||
|
@@ -45,13 +45,29 @@ static int manager_link_is_online(Manager *m, Link *l, LinkOperationalStateRange
|
||||||
|
* 0: operstate is not enough
|
||||||
|
* 1: online */
|
||||||
|
|
||||||
|
- if (!l->state)
|
||||||
|
+ if (!l->state || streq(l->state, "pending"))
|
||||||
|
+ /* If no state string exists, networkd (and possibly also udevd) has not detected the
|
||||||
|
+ * interface yet, that mean we cannot determine whether the interface is managed or
|
||||||
|
+ * not. Hence, return negative value.
|
||||||
|
+ * If the link is in pending state, then udevd has not processed the link, and networkd
|
||||||
|
+ * has not tried to find .network file for the link. Hence, return negative value. */
|
||||||
|
return log_link_debug_errno(l, SYNTHETIC_ERRNO(EAGAIN),
|
||||||
|
- "link has not yet been processed by udev");
|
||||||
|
+ "link has not yet been processed by udev: setup state is %s.",
|
||||||
|
+ strna(l->state));
|
||||||
|
+
|
||||||
|
+ if (streq(l->state, "unmanaged")) {
|
||||||
|
+ /* If the link is in unmanaged state, then ignore the interface unless the interface is
|
||||||
|
+ * specified in '--interface/-i' option. */
|
||||||
|
+ if (!hashmap_contains(m->command_line_interfaces_by_name, l->ifname)) {
|
||||||
|
+ log_link_debug(l, "link is not managed by networkd (yet?).");
|
||||||
|
+ return 0;
|
||||||
|
+ }
|
||||||
|
|
||||||
|
- if (STR_IN_SET(l->state, "configuring", "pending"))
|
||||||
|
+ } else if (!streq(l->state, "configured"))
|
||||||
|
+ /* If the link is in non-configured state, return negative value here. */
|
||||||
|
return log_link_debug_errno(l, SYNTHETIC_ERRNO(EAGAIN),
|
||||||
|
- "link is being processed by networkd");
|
||||||
|
+ "link is being processed by networkd: setup state is %s.",
|
||||||
|
+ l->state);
|
||||||
|
|
||||||
|
if (s.min < 0)
|
||||||
|
s.min = m->required_operstate.min >= 0 ? m->required_operstate.min
|
||||||
|
@@ -96,6 +112,7 @@ static int manager_link_is_online(Manager *m, Link *l, LinkOperationalStateRange
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
+ log_link_debug(l, "link is configured by networkd and online.");
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
--
|
||||||
|
2.33.0
|
||||||
|
|
||||||
@ -25,7 +25,7 @@
|
|||||||
Name: systemd
|
Name: systemd
|
||||||
Url: https://systemd.io/
|
Url: https://systemd.io/
|
||||||
Version: 249
|
Version: 249
|
||||||
Release: 91
|
Release: 92
|
||||||
License: MIT and LGPLv2+ and GPLv2+
|
License: MIT and LGPLv2+ and GPLv2+
|
||||||
Summary: System and Service Manager
|
Summary: System and Service Manager
|
||||||
|
|
||||||
@ -694,6 +694,7 @@ Patch6641: backport-repart-fix-invalid-errno-in-log.patch
|
|||||||
Patch6642: backport-sysusers-insist-that-root-group-is-0.patch
|
Patch6642: backport-sysusers-insist-that-root-group-is-0.patch
|
||||||
Patch6643: backport-importd-Always-specify-file-unpacked-by-tar.patch
|
Patch6643: backport-importd-Always-specify-file-unpacked-by-tar.patch
|
||||||
Patch6644: backport-docs-remove-dev-tty-confusion.patch
|
Patch6644: backport-docs-remove-dev-tty-confusion.patch
|
||||||
|
Patch6645: backport-wait-online-make-manager_link_is_online-return-0-whe.patch
|
||||||
|
|
||||||
Patch9001: update-rtc-with-system-clock-when-shutdown.patch
|
Patch9001: update-rtc-with-system-clock-when-shutdown.patch
|
||||||
Patch9002: udev-add-actions-while-rename-netif-failed.patch
|
Patch9002: udev-add-actions-while-rename-netif-failed.patch
|
||||||
@ -2208,6 +2209,10 @@ grep -q -E '^KEYMAP="?fi-latin[19]"?' /etc/vconsole.conf 2>/dev/null &&
|
|||||||
/usr/bin/systemd-cryptenroll
|
/usr/bin/systemd-cryptenroll
|
||||||
|
|
||||||
%changelog
|
%changelog
|
||||||
|
* Wed Dec 04 2024 zhangyao <zhangyao108@huawei.com> - 249-92
|
||||||
|
- wait-online: fix handling of unmanaged state
|
||||||
|
- add backport-wait-online-make-manager_link_is_online-return-0-whe.patch
|
||||||
|
|
||||||
* Wed Dec 04 2024 zhangyao <zhangyao108@huawei.com> - 249-91
|
* Wed Dec 04 2024 zhangyao <zhangyao108@huawei.com> - 249-91
|
||||||
- add backport-userdb-Use-json_dispatch_user_group_name-to-parse-Ge.patch
|
- add backport-userdb-Use-json_dispatch_user_group_name-to-parse-Ge.patch
|
||||||
backport-README-explicitly-note-that-util-linux-s-mount-swap-.patch
|
backport-README-explicitly-note-that-util-linux-s-mount-swap-.patch
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user