File util-linux-agetty-smart-reload-02.patch of Package python-libmount.31381
Backport, partial rewrite.
From 36c55a89871d836a9c6a2832151f0ca907e83ea0 Mon Sep 17 00:00:00 2001
From: Stanislav Brabec <sbrabec@suse.cz>
Date: Wed, 10 Oct 2018 19:26:27 +0200
Subject: [PATCH 02/14] agetty: Watch only protocol requested by issue escapes
To decrease number of reloads, watch only protocol requested by \4 and \6
escapes in issue file.
Signed-off-by: Stanislav Brabec <sbrabec@suse.cz>
---
term-utils/agetty.c | 19 ++++++++++++++-----
1 file changed, 14 insertions(+), 5 deletions(-)
Index: util-linux-2.31.1/term-utils/agetty.c
===================================================================
--- util-linux-2.31.1.orig/term-utils/agetty.c
+++ util-linux-2.31.1/term-utils/agetty.c
@@ -146,6 +146,7 @@
# define AGETTY_RELOAD_FDNONE -2 /* uninitialized fd */
static int inotify_fd = AGETTY_RELOAD_FDNONE;
static int netlink_fd = AGETTY_RELOAD_FDNONE;
+static __u32 netlink_groups;
#endif
/*
@@ -1537,7 +1538,7 @@ static void open_netlink(void)
if (sock >= 0) {
addr.nl_family = AF_NETLINK;
addr.nl_pid = getpid();
- addr.nl_groups = RTMGRP_IPV4_IFADDR | RTMGRP_IPV6_IFADDR;
+ addr.nl_groups = netlink_groups;
if (bind(sock, (struct sockaddr *)&addr, sizeof(addr)) < 0)
close(sock);
else
@@ -1662,6 +1663,9 @@ static void print_issue_file(struct opti
{
#ifdef ISSUE
FILE *fd;
+#ifdef AGETTY_RELOAD
+ netlink_groups = 0;
+#endif
#endif
if ((op->flags & F_NONL) == 0) {
/* Issue not in use, start with a new line. */
@@ -1694,6 +1698,10 @@ static void print_issue_file(struct opti
}
fclose(fd);
}
+#ifdef AGETTY_RELOAD
+ if (netlink_groups != 0)
+ open_netlink();
+#endif
#endif /* ISSUE */
}
@@ -2483,13 +2491,10 @@ static void output_special_char(unsigned
case '6':
{
sa_family_t family = c == '4' ? AF_INET : AF_INET6;
+ netlink_groups |= c == '4' ? RTMGRP_IPV4_IFADDR : RTMGRP_IPV6_IFADDR;
struct ifaddrs *addrs = NULL;
char iface[128];
-#ifdef AGETTY_RELOAD
- open_netlink();
-#endif
-
if (getifaddrs(&addrs))
break;