Currently sys_walk_modalias only looks for a modalias in the grandparent of the given device path. This doesn't match what the name 'walk' implies.
sys_walk_mod_add calls it for each level of the device hierarchy, but since it only looks at the grandparent it will miss some modaliases, e.g. sd_mod or virtio_blk. We explicitly add sd_mod when we see any SCSI device, so we usually get away with this. However, virtio_blk is currently not added to a MODULES=dep initramfs if it is modular for the target kernel but built into the running kernel. Related-to: #760127 Signed-off-by: Ben Hutchings <b...@decadent.org.uk> --- hook-functions | 22 ++++++++++++---------- 1 file changed, 12 insertions(+), 10 deletions(-) diff --git a/hook-functions b/hook-functions index ed22164..edc5de0 100644 --- a/hook-functions +++ b/hook-functions @@ -199,8 +199,9 @@ sys_walk_mod_add() local driver_path module device_path="$1" + sys_walk_modalias "${device_path}" + while [ "${device_path}" != "/sys" ]; do - sys_walk_modalias ${device_path} driver_path="$(readlink -f ${device_path}/driver/module)" if [ -e "$driver_path" ]; then module="$(basename $(readlink -f $driver_path))" @@ -216,16 +217,17 @@ sys_walk_mod_add() sys_walk_modalias() { local device_path modalias + device_path="$1" - device_path="$(dirname "${1}")" - device_path="$(dirname "${device_path}")" - if [ -e "${device_path}/modalias" ]; then - modalias=$(cat "${device_path}/modalias") - fi - - if [ -n "${modalias}" ]; then - force_load "${modalias}" - fi + while [ "${device_path}" != "/sys" ]; do + if [ -e "${device_path}/modalias" ]; then + modalias=$(cat "${device_path}/modalias") + if [ -n "${modalias}" ]; then + force_load "${modalias}" + fi + fi + device_path="$(dirname ${device_path})" + done } # find and only copy root relevant modules -- Ben Hutchings This sentence contradicts itself - no actually it doesn't.
signature.asc
Description: This is a digitally signed message part