From: Harald Hoyer Date: Tue, 9 Aug 2016 13:26:04 +0000 (+0200) Subject: dracut-functions.sh: catch all lvm slaves X-Git-Tag: 045~120 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=c7c8c4981ac3a0258ff053fdd02cfe17a11710da;p=thirdparty%2Fdracut.git dracut-functions.sh: catch all lvm slaves add check_vol_slaves_all to be used in check_block_and_slaves_all otherwise only the first lvm VG member would be processed (cherry picked from commit 7a7b8c174023886b015bd484372839aecf63f324) --- diff --git a/dracut-functions.sh b/dracut-functions.sh index 4496bfe6c..249d8fb4b 100755 --- a/dracut-functions.sh +++ b/dracut-functions.sh @@ -507,7 +507,7 @@ check_block_and_slaves_all() { if ! lvm_internal_dev $2 && "$1" $2; then _ret=0 fi - check_vol_slaves "$@" && return 0 + check_vol_slaves_all "$@" && return 0 if [[ -f /sys/dev/block/$2/../dev ]]; then check_block_and_slaves_all $1 $(<"/sys/dev/block/$2/../dev") && _ret=0 fi @@ -580,6 +580,29 @@ check_vol_slaves() { return 1 } +check_vol_slaves_all() { + local _lv _vg _pv + for i in /dev/mapper/*; do + [[ $i == /dev/mapper/control ]] && continue + _lv=$(get_maj_min $i) + if [[ $_lv = $2 ]]; then + _vg=$(lvm lvs --noheadings -o vg_name $i 2>/dev/null) + # strip space + _vg="${_vg//[[:space:]]/}" + if [[ $_vg ]]; then + for _pv in $(lvm vgs --noheadings -o pv_name "$_vg" 2>/dev/null) + do + check_block_and_slaves_all $1 $(get_maj_min $_pv) + done + return 0 + fi + fi + done + return 1 +} + + + # fs_get_option # search for a specific option in a bunch of filesystem options # and return the value