From: Harald Hoyer Date: Mon, 19 Feb 2018 08:03:02 +0000 (+0100) Subject: dracut-function.sh:check_block_and_slaves() check for block devices X-Git-Tag: 047~2 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=e64dafd1f2489f1d926cce3e3bfd33f62b29b192;p=thirdparty%2Fdracut.git dracut-function.sh:check_block_and_slaves() check for block devices Some nvme have char parents, so check if the "slave" is a block dev. Fixes https://github.com/dracutdevs/dracut/issues/373 --- diff --git a/dracut-functions.sh b/dracut-functions.sh index 0c78cf0dc..ccc489719 100755 --- a/dracut-functions.sh +++ b/dracut-functions.sh @@ -497,13 +497,14 @@ check_block_and_slaves() { [[ -b /dev/block/$2 ]] || return 1 # Not a block device? So sorry. if ! lvm_internal_dev $2; then "$1" $2 && return; fi check_vol_slaves "$@" && return 0 - if [[ -f /sys/dev/block/$2/../dev ]]; then + if [[ -f /sys/dev/block/$2/../dev ]] && [[ /sys/dev/block/$2/../subsystem -ef /sys/class/block ]]; then check_block_and_slaves $1 $(<"/sys/dev/block/$2/../dev") && return 0 fi [[ -d /sys/dev/block/$2/slaves ]] || return 1 - for _x in /sys/dev/block/$2/slaves/*/dev; do - [[ -f $_x ]] || continue - check_block_and_slaves $1 $(<"$_x") && return 0 + for _x in /sys/dev/block/$2/slaves/*; do + [[ -f $_x/dev ]] || continue + [[ $_x/subsystem -ef /sys/class/block ]] || continue + check_block_and_slaves $1 $(<"$_x/dev") && return 0 done return 1 } @@ -515,13 +516,14 @@ check_block_and_slaves_all() { _ret=0 fi check_vol_slaves_all "$@" && return 0 - if [[ -f /sys/dev/block/$2/../dev ]]; then + if [[ -f /sys/dev/block/$2/../dev ]] && [[ /sys/dev/block/$2/../subsystem -ef /sys/class/block ]]; then check_block_and_slaves_all $1 $(<"/sys/dev/block/$2/../dev") && _ret=0 fi [[ -d /sys/dev/block/$2/slaves ]] || return 1 - for _x in /sys/dev/block/$2/slaves/*/dev; do - [[ -f $_x ]] || continue - check_block_and_slaves_all $1 $(<"$_x") && _ret=0 + for _x in /sys/dev/block/$2/slaves/*; do + [[ -f $_x/dev ]] || continue + [[ $_x/subsystem -ef /sys/class/block ]] || continue + check_block_and_slaves_all $1 $(<"$_x/dev") && _ret=0 done return $_ret }