lists.openwall.net | lists / announce owl-users owl-dev john-users john-dev passwdqc-users yescrypt popa3d-users / oss-security kernel-hardening musl sabotage tlsify passwords / crypt-dev xvendor / Bugtraq Full-Disclosure linux-kernel linux-netdev linux-ext4 linux-hardening linux-cve-announce PHC | |
Open Source and information security mailing list archives
| ||
|
Date: Sat, 1 Aug 2020 16:58:45 +0800 From: Wen Yang <wenyang@...ux.alibaba.com> To: davem@...emloft.net, Jakub Kicinski <kuba@...nel.org> Cc: Xunlei Pang <xlpang@...ux.alibaba.com>, Caspar Zhang <caspar@...ux.alibaba.com>, Wen Yang <wenyang@...ux.alibaba.com>, Andrew Lunn <andrew@...n.ch>, Eric Dumazet <edumazet@...gle.com>, Jiri Pirko <jiri@...lanox.com>, Leon Romanovsky <leon@...nel.org>, Julian Wiedmann <jwi@...ux.ibm.com>, netdev@...r.kernel.org, linux-kernel@...r.kernel.org Subject: [PATCH] net: core: explicitly call linkwatch_fire_event to speed up the startup of network services The linkwatch_event work queue runs up to one second later. When the MicroVM starts, it takes 300+ms for the ethX flag to change from '+UP +LOWER_UP' to '+RUNNING', as follows: Jul 20 22:00:47.432552 systemd-networkd[210]: eth0: bringing link up ... Jul 20 22:00:47.446108 systemd-networkd[210]: eth0: flags change: +UP +LOWER_UP ... Jul 20 22:00:47.781463 systemd-networkd[210]: eth0: flags change: +RUNNING Let's manually trigger it here to make the network service start faster. After applying this patch, the time consumption of systemd-networkd.service was reduced from 366ms to 50ms. Signed-off-by: Wen Yang <wenyang@...ux.alibaba.com> Cc: "David S. Miller" <davem@...emloft.net> Cc: Jakub Kicinski <kuba@...nel.org> Cc: Andrew Lunn <andrew@...n.ch> Cc: Eric Dumazet <edumazet@...gle.com> Cc: Jiri Pirko <jiri@...lanox.com> Cc: Leon Romanovsky <leon@...nel.org> Cc: Julian Wiedmann <jwi@...ux.ibm.com> Cc: netdev@...r.kernel.org Cc: linux-kernel@...r.kernel.org --- net/core/link_watch.c | 3 +++ net/core/rtnetlink.c | 1 + 2 files changed, 4 insertions(+) diff --git a/net/core/link_watch.c b/net/core/link_watch.c index 75431ca..6b9d44b 100644 --- a/net/core/link_watch.c +++ b/net/core/link_watch.c @@ -98,6 +98,9 @@ static bool linkwatch_urgent_event(struct net_device *dev) if (netif_is_lag_port(dev) || netif_is_lag_master(dev)) return true; + if ((dev->flags & IFF_UP) && dev->operstate == IF_OPER_DOWN) + return true; + return netif_carrier_ok(dev) && qdisc_tx_changing(dev); } diff --git a/net/core/rtnetlink.c b/net/core/rtnetlink.c index 58c484a..fd0b3b6 100644 --- a/net/core/rtnetlink.c +++ b/net/core/rtnetlink.c @@ -2604,6 +2604,7 @@ static int do_setlink(const struct sk_buff *skb, extack); if (err < 0) goto errout; + linkwatch_fire_event(dev); } if (tb[IFLA_MASTER]) { -- 1.8.3.1
Powered by blists - more mailing lists