Extend root device hints for different types of WWN
This patch is extending the root device hints to also look at ID_WWN_WITH_EXTENSION and ID_WWN_VENDOR_EXTENSION from udev. Prior to this patch the bash ramdisk only cared about ID_WWN but in some systems in some platforms with a RAID controller, this ID can be same even if they are different disks (see bug 1516641). Related-Bug: #1516641 Change-Id: I45b3910d03d164d880b32169b91e94e88812e183
This commit is contained in:
parent
2ff566b80a
commit
ff988ac45c
@ -25,6 +25,11 @@ function _exec_lsblk() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
function _exec_scsi_id() {
|
||||||
|
/lib/udev/scsi_id --whitelisted --export -d $1 | grep $2 | cut -d "=" -f 2
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
# Get the block device size in GiB
|
# Get the block device size in GiB
|
||||||
function get_size() {
|
function get_size() {
|
||||||
echo $(( (512 * $(cat /sys/block/$1/size) ) / 2**30))
|
echo $(( (512 * $(cat /sys/block/$1/size) ) / 2**30))
|
||||||
@ -54,6 +59,16 @@ function get_wwn() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
function get_wwn_with_extension() {
|
||||||
|
normalize "$(_exec_scsi_id "$1" ID_WWN_WITH_EXTENSION)"
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
function get_wwn_vendor_extension() {
|
||||||
|
normalize "$(_exec_scsi_id "$1" ID_WWN_VENDOR_EXTENSION)"
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
function get_serial() {
|
function get_serial() {
|
||||||
normalize "$(_exec_lsblk "$1" SERIAL)"
|
normalize "$(_exec_lsblk "$1" SERIAL)"
|
||||||
}
|
}
|
||||||
@ -77,6 +92,12 @@ function parse_hints() {
|
|||||||
wwn=*)
|
wwn=*)
|
||||||
CHECK_WWN=`normalize "${i#wwn=}"`
|
CHECK_WWN=`normalize "${i#wwn=}"`
|
||||||
;;
|
;;
|
||||||
|
wwn_with_extension=*)
|
||||||
|
CHECK_WWN_WITH_EXT=`normalize "${i#wwn_with_extension=}"`
|
||||||
|
;;
|
||||||
|
wwn_vendor_extension=*)
|
||||||
|
CHECK_WWN_VENDOR_EXT=`normalize "${i#wwn_vendor_extension=}"`
|
||||||
|
;;
|
||||||
serial=*)
|
serial=*)
|
||||||
CHECK_SERIAL=`normalize "${i#serial=}"`
|
CHECK_SERIAL=`normalize "${i#serial=}"`
|
||||||
;;
|
;;
|
||||||
@ -107,6 +128,8 @@ function get_root_device() {
|
|||||||
[[ $CHECK_VENDOR != false && $(get_vendor "$DEV_NAME") != $CHECK_VENDOR ]] && continue || :
|
[[ $CHECK_VENDOR != false && $(get_vendor "$DEV_NAME") != $CHECK_VENDOR ]] && continue || :
|
||||||
[[ $CHECK_SERIAL != false && $(get_serial "$DEV_NAME") != $CHECK_SERIAL ]] && continue || :
|
[[ $CHECK_SERIAL != false && $(get_serial "$DEV_NAME") != $CHECK_SERIAL ]] && continue || :
|
||||||
[[ $CHECK_WWN != false && $(get_wwn "$DEV_NAME") != $CHECK_WWN ]] && continue || :
|
[[ $CHECK_WWN != false && $(get_wwn "$DEV_NAME") != $CHECK_WWN ]] && continue || :
|
||||||
|
[[ $CHECK_WWN_WITH_EXT!= false && $(get_wwn_with_extension "$DEV_NAME") != $CHECK_WWN_WITH_EXT ]] && continue || :
|
||||||
|
[[ $CHECK_WWN_VENDOR_EXT != false && $(get_wwn_vendor_extension "$DEV_NAME") != $CHECK_WWN_VENDOR_EXT ]] && continue || :
|
||||||
|
|
||||||
# A device that matches all hints was found
|
# A device that matches all hints was found
|
||||||
echo "$DEV_PATH"
|
echo "$DEV_PATH"
|
||||||
|
Loading…
Reference in New Issue
Block a user