powerpc-utils/SOURCES/powerpc-utils-git3847a1-sup...

119 lines
4.0 KiB
Diff

commit 3847a1c25a640394c4afd2b8938ad21190bf5dbe
Author: Wen Xiong <wenxiong@linux.ibm.com>
Date: Fri Oct 28 09:20:38 2022 -0500
Support multiple dev paths for a nvmf boot device
This patch adds the support for multiple dev/of paths with a nvmf boot dev
# bootlist -m normal -o nvme1n4
nvme1n4
nvme3n4
nvme5n4
nvme6n4
# bootlist -m normal -o
nvme1n4
nvme3n4
nvme5n4
nvme6n4
# bootlist -m normal -r
/pci@800000020000017/fibre-channel@0/nvme-of/controller@50050768101935e5,ffff:nqn=nqn.1986-03.com.ibm:nvme:2145.0000020420006CEA/namespace@147
/pci@800000020000017/fibre-channel@0/nvme-of/controller@5005076810193675,ffff:nqn=nqn.1986-03.com.ibm:nvme:2145.0000020420006CEA/namespace@147
/pci@800000020000017/fibre-channel@0,1/nvme-of/controller@5005076810193675,ffff:nqn=nqn.1986-03.com.ibm:nvme:2145.0000020420006CEA/namespace@147
/pci@800000020000017/fibre-channel@0,1/nvme-of/controller@50050768101935e5,ffff:nqn=nqn.1986-03.com.ibm:nvme:2145.0000020420006CEA/namespace@147
Signed-off-by: Wen Xiong <wenxiong@linux.ibm.com>
Signed-off-by: Tyrel Datwyler <tyreld@linux.ibm.com>
diff --git a/scripts/bootlist b/scripts/bootlist
index 1929f65..cc8718e 100755
--- a/scripts/bootlist
+++ b/scripts/bootlist
@@ -327,16 +327,10 @@ add_nvmf()
cd $dir
link=`get_link "device"`
cd $link
- for slave in $PWD/*; do
- slavedev=${slave##*/}
- if [[ "$slavedev" == nvme[0-9]* ]] ; then
- cd $slave
- res=`$FIND . -name "${ctrl_name}*"`
- if [[ ${#res} != 0 ]]; then
- LOGICAL_NAMES[$ctr]=${slavedev}
- ctr=$[$ctr + 1]
- fi
- fi
+ for slave in `ls -d $PWD/nvme*`; do
+ slavedev=${slave##*/}
+ LOGICAL_NAMES[$ctr]=${slavedev}
+ ctr=$[$ctr + 1]
done
done
@@ -502,11 +496,17 @@ while [[ -n $1 ]]; do
ctrl_name="${ctrl_name%n[0-9]*}"
is_nvmf=$(is_nvmf_device $ctrl_name)
if [[ $is_nvmf = "yes" ]]; then
- if [[ "$1" == *"nvme-of"* ]]; then
- master_of_path=$1
- else
- master_of_path=`get_of_device_name $1`
- fi
+ if [[ "$1" == *"nvme-of"* ]]; then
+ master_of_path=$1
+ else
+ master_of_path=`get_of_device_name $1`
+ fi
+
+ if [[ -z $master_of_path ]]; then
+ echo "Device $1 does not appear to be valid." >&2
+ exit 1
+ fi
+
namespace_base=${master_of_path##*/}
DEVTYPE="nvme-of"
add_nvmf $ctrl_name
diff --git a/scripts/ofpathname b/scripts/ofpathname
index 33d7702..c576fb8 100755
--- a/scripts/ofpathname
+++ b/scripts/ofpathname
@@ -1875,19 +1875,28 @@ of2l_nvmf()
fi
done
+ local ana_dir
if [[ -n $LOGICAL_DEVNAME ]] && \
[[ -n $nsid ]]; then
- for dir in `$FIND /sys/block -name "${LOGICAL_DEVNAME}n[0-9]*"`; do
- cd $dir
-
- local devnsid=`$CAT ./nsid 2>/dev/null`
- devnsid=`echo "obase=16; $devnsid" |bc`
- if [[ $devnsid = $nsid ]]; then
- found=1
- LOGICAL_DEVNAME="${dir##*/}"
- break
- fi
+ for ana_dir in `$FIND /sys/devices/virtual/nvme-fabrics -name "$LOGICAL_DEVNAME"`; do
+ cd $ana_dir
+ link=`get_link "device"`
+ cd $link
+ for ana_name in `ls -d $PWD/nvme*`; do
+ for dev_name in `$FIND /sys/block -name "${ana_name##*/}n[0-9]*"`; do
+ cd $dev_name
+ local devnsid=`$CAT ./nsid 2>/dev/null`
+ devnsid=`echo "obase=16; $devnsid" |bc`
+ if [[ $devnsid = $nsid ]]; then
+ found=1
+ NS_ID="${dev_name##*n}"
+ LOGICAL_DEVNAME="${LOGICAL_DEVNAME}n${NS_ID}"
+ break
+ fi
+ done
+ done
done
+
if [[ $found -eq 0 ]]; then
LOGICAL_DEVNAME=""
fi