]> git.ipfire.org Git - thirdparty/dracut.git/commitdiff
fix(nvmf): nvme list-subsys prints the address using commas as separator
authorAntonio Alvarez Feijoo <antonio.feijoo@suse.com>
Wed, 14 Sep 2022 10:44:26 +0000 (12:44 +0200)
committerJóhann B. Guðmundsson <johannbg@gmail.com>
Fri, 30 Sep 2022 06:02:18 +0000 (06:02 +0000)
nvme-cli 1.x printed the address using spaces as separator, but nvme-cli 2.x
prints the address using commas as separator (exact output from sysfs). E.g.,
output from `cat /sys/class/nvme/nvme0/address`:

traddr=nn-0x201700a09890f5bf:pn-0x201900a09890f5bf,host_traddr=nn-0x200000109b579ef5:pn-0x100000109b579ef5

Also, I suppress rd.nvmf.discover= cmdline option if all fields are empty.

modules.d/95nvmf/module-setup.sh

index be1c85f3c3e416d76005b99f37fa98fb3bd499c1..0825b51c2d3ecd7b659495a10fde2206e4d5318f 100755 (executable)
@@ -61,6 +61,11 @@ cmdline() {
     gen_nvmf_cmdline() {
         local _dev=$1
         local trtype
+        local traddr
+        local host_traddr
+        local trsvcid
+        local _address
+        local -a _address_parts
 
         [[ -L "/sys/dev/block/$_dev" ]] || return 0
         cd -P "/sys/dev/block/$_dev" || return 0
@@ -76,9 +81,19 @@ cmdline() {
         done
 
         [ -z "$trtype" ] && return 0
-        nvme list-subsys "${PWD##*/}" | while read -r _ _ trtype traddr host_traddr _; do
-            [ "$trtype" != "${trtype#NQN}" ] && continue
-            echo -n " rd.nvmf.discover=$trtype,${traddr#traddr=},${host_traddr#host_traddr=}"
+        nvme list-subsys "${PWD##*/}" | while read -r _ _ trtype _address _; do
+            [[ -z $trtype || $trtype != "${trtype#NQN}" ]] && continue
+            unset traddr
+            unset host_traddr
+            unset trsvcid
+            mapfile -t -d ',' _address_parts < <(printf "%s" "$_address")
+            for i in "${_address_parts[@]}"; do
+                [[ $i =~ ^traddr= ]] && traddr="${i#traddr=}"
+                [[ $i =~ ^host_traddr= ]] && host_traddr="${i#host_traddr=}"
+                [[ $i =~ ^trsvcid= ]] && trsvcid="${i#trsvcid=}"
+            done
+            [[ -z $traddr && -z $host_traddr && -z $trsvcid ]] && continue
+            echo -n " rd.nvmf.discover=$trtype,$traddr,$host_traddr,$trsvcid"
         done
     }