From 5e6d9d2679e5be85ce64e1f84c2d3d420eb4eddf Mon Sep 17 00:00:00 2001 From: Lichen Liu Date: Dec 27 2022 05:31:11 +0000 Subject: dracut-module-setup.sh: skip installing driver for the loopback interface Resolves: bz2151500 Upstream: Fedora Conflict: None commit 3b22cce1cb7dd12be07822018d08c9bb8f03add9 Author: Coiby Xu Date: Wed Dec 14 10:12:17 2022 +0800 dracut-module-setup.sh: skip installing driver for the loopback interface Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=2151500 Currently, kdump initrd fails to be built when dumping vmcore to localhost via ssh or nfs, kdumpctl[3331]: Cannot get driver information: Operation not supported kdumpctl[1991]: dracut: Failed to get the driver of lo dracut[2020]: Failed to get the driver of lo kdumpctl[1775]: kdump: mkdumprd: failed to make kdump initrd kdumpctl[1775]: kdump: Starting kdump: [FAILED] systemd[1]: kdump.service: Main process exited, code=exited, status=1/FAILURE systemd[1]: kdump.service: Failed with result 'exit-code'. systemd[1]: Failed to start Crash recovery kernel arming. systemd[1]: kdump.service: Consumed 1.710s CPU time. This is because the loopback interface is used for transferring vmcore and ethtool can't get the driver of the loopback interface. In fact, once COFNIG_NET is enabled, the loopback device is enabled and there is no driver for the loopback device. So skip installing driver for the loopback device. The loopback interface is implemented in linux/drivers/net/loopback.c and always has the name "lo". So we can safely tell if a network interface is the loopback interface by its name. Fixes: a65dde2d ("Reduce kdump memory consumption by only installing needed NIC drivers") Reported-by: Martin Pitt Reported-by: Rich Megginson Reviewed-by: Lichen Liu Reviewed-by: Philipp Rudo Signed-off-by: Coiby Xu Signed-off-by: Lichen Liu --- diff --git a/dracut-module-setup.sh b/dracut-module-setup.sh index a49d688..d01c5d9 100755 --- a/dracut-module-setup.sh +++ b/dracut-module-setup.sh @@ -395,6 +395,7 @@ kdump_install_nic_driver() { _drivers=() for _netif in $1; do + [[ $_netif == lo ]] && continue _driver=$(_get_nic_driver "$_netif") if [[ -z $_driver ]]; then derror "Failed to get the driver of $_netif" @@ -417,6 +418,7 @@ kdump_install_nic_driver() { _drivers+=("$_driver") done + [[ -n ${_drivers[*]} ]] || return instmods "${_drivers[@]}" }