diff --git a/modules.d/90kernel-modules/module-setup.sh b/modules.d/90kernel-modules/module-setup.sh index a4572259..73df29bf 100755 --- a/modules.d/90kernel-modules/module-setup.sh +++ b/modules.d/90kernel-modules/module-setup.sh @@ -3,6 +3,7 @@ # called by dracut installkernel() { 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|scsi_add_host_with_dma' + local _hostonly_drvs find_kernel_modules_external () { local _OLDIFS @@ -19,13 +20,19 @@ installkernel() { IFS=$_OLDIFS } - is_block_dev() { - [ -e /sys/dev/block/$1 ] && return 0 + record_block_dev_drv() { + for _mod in $(get_dev_module /dev/block/$1); do + [[ " $_hostonly_drvs " != *$_mod* ]] && _hostonly_drvs+=" $_mod" + done + [[ "$_hostonly_drvs" ]] && return 0 return 1 } + install_block_modules_strict () { + hostonly='' instmods $_hostonly_drvs + } + install_block_modules () { - hostonly='' instmods sg sr_mod sd_mod scsi_dh ata_piix instmods \ scsi_dh_rdac scsi_dh_emc scsi_dh_alua \ =ide nvme vmd \ @@ -93,8 +100,18 @@ installkernel() { find_kernel_modules_external | instmods - if ! [[ $hostonly ]] || for_each_host_dev_and_slaves is_block_dev; then - install_block_modules + # if not on hostonly mode, or there are hostonly block device + # install block drivers + if ! [[ $hostonly ]] || \ + for_each_host_dev_and_slaves_all record_block_dev_drv; + then + hostonly='' instmods sg sr_mod sd_mod scsi_dh ata_piix + + if [[ "$hostonly_mode" == "strict" ]]; then + install_block_modules_strict + else + install_block_modules + fi fi # if not on hostonly mode, install all known filesystems,