IF_dynamic=""
# Generic substring function. If $2 is in $1, return 0.
-strstr() { [[ ! ${1#*$2*} = $1 ]]; }
+strstr() { [[ $1 =~ $2 ]]; }
# Log initrd creation.
if ! [[ $dracutlogfile ]]; then
)
# finds the major:minor of the block device backing the root filesystem.
-find_root_block_device() {
+find_block_device() {
local rootdev blkdev fs type opts misc
while read blkdev fs type opts misc; do
[[ $blkdev = rootfs ]] && continue # skip rootfs entry
- [[ $fs = / ]] && { rootdev=$blkdev; break; } # we have a winner!
+ [[ $fs = $1 ]] && { rootdev=$blkdev; break; } # we have a winner!
done < /proc/mounts
[[ -b $rootdev ]] || return 1 # oops, not a block device.
# get major/minor for the device
(read x x x x maj min x; maj=${maj//,/}; echo $maj:$min)
}
+find_root_block_device() { find_block_device /; }
+
# Walk all the slave relationships for a given block device.
# Stop when our helper function returns success
# $1 = function to call on every found block device
#!/bin/bash
if [[ -z $drivers ]]; then
- drivers="sd_mod =fs"
+ drivers="sd_mod"
# Include block controller drivers
blockfuncs='ata_scsi_ioctl|scsi_add_host|blk_init_queue|register_mtd_blktrans|scsi_esp_register|register_virtio_device'
- for modname in $(find "$srcmods/kernel/drivers" -name '*.ko'); do
- if nm -uPA $modname | egrep -q "$blockfuncs"; then
- drivers="${drivers} $modname"
- fi
- done
+ if [[ $hostonly = "" ]]; then
+ for modname in $(find "$srcmods/kernel/drivers" -name '*.ko'); do
+ if nm -uPA $modname | egrep -q "$blockfuncs"; then
+ drivers="${drivers} $modname"
+ fi
+ done
+ drivers="${drivers} =fs"
+ else
+ while read modname rest; do
+ modname=$(modinfo -F filename -k $kernel $modname)
+ if nm -uPA $modname |egrep -q "$blockfuncs"; then
+ drivers="${drivers} $modname"
+ fi
+ done </proc/modules
+ instmods $(get_fs_type "/dev/block/$(find_root_block_device)")
+ fi
instmods $drivers
# hardcoded list of exceptions
rm -fr ${initdir}/lib/modules/*/kernel/fs/ocfs2