From a929c6f1b19cc945c119802feff2d8e111954f5c Mon Sep 17 00:00:00 2001 From: Daniel Molkentin Date: Thu, 20 Apr 2017 21:54:38 +0200 Subject: [PATCH] 90kernel-modules: also add block device driver reverse dependencies The code finds relevant modules by symbol. Some drivers, such as the hisi_sas has two slightly different implementations with a common backend which contain the relevant symbols. However, we also need to include the modules that depend on these implementations. Ex: hisi_sas_v{1,2}_hw -> hisi_sas_main We use a simple reverse lookup for all modules via modules.dep to include direct reverse dependencies. Reference: bnc#1034597 --- modules.d/90kernel-modules/module-setup.sh | 24 +++++++++++++++++++++++- 1 file changed, 23 insertions(+), 1 deletion(-) diff --git a/modules.d/90kernel-modules/module-setup.sh b/modules.d/90kernel-modules/module-setup.sh index 67d0e01e..bc00991d 100755 --- a/modules.d/90kernel-modules/module-setup.sh +++ b/modules.d/90kernel-modules/module-setup.sh @@ -3,6 +3,28 @@ # called by dracut installkernel() { if [[ -z $drivers ]]; then + # modules with symbols might have abstractions that depend on them, so let's add those + add_rev_deps() { + local _module + local _line + [[ -f "$srcmods/modules.dep" ]] || return 0 + while read _module; do + local _mod + local _deps + _module=${_module##$srcmods/} + printf "%s\n" "$_module" + egrep ".*:.*$_module.*" $srcmods/modules.dep | ( + local _OLDIFS=$IFS + IFS=: + while read _mod _deps; do + printf "%s\n" "$srcmods/$_mod" + done + IFS=$_OLDIFS + ) + done | sort -u + return 0 + } + block_module_filter() { local _blockfuncs='ahci_platform_get_resources|ata_scsi_ioctl|scsi_add_host|blk_cleanup_queue|register_mtd_blktrans|scsi_esp_register|register_virtio_device|usb_stor_disconnect|mmc_add_host|sdhci_add_host' # subfunctions inherit following FDs @@ -65,7 +87,7 @@ installkernel() { instmods virtio virtio_blk virtio_ring virtio_pci virtio_scsi \ "=drivers/pcmcia" =ide "=drivers/usb/storage" - find_kernel_modules | block_module_filter | instmods + find_kernel_modules | block_module_filter | add_rev_deps | instmods # if not on hostonly mode, install all known filesystems, # if the required list is not set via the filesystems variable -- 2.12.0