File 0161-95zfcp_rules-simplified-rd.zfcp-commandline-for-NPIV.patch of Package dracut.16003

From 61d345654fbdd895a406a5a7517f01a7c984a7ed Mon Sep 17 00:00:00 2001
From: Hannes Reinecke <hare@suse.de>
Date: Thu, 10 Mar 2016 15:45:43 +0100
Subject: [PATCH] 95zfcp_rules: simplified rd.zfcp commandline for NPIV

When NPIV is enabled and the allow_lun_scan parameter is set to 'Y'
the HBA will initiate a LUN scan automatically, so there is no need
to specify the WWPN and LUN number manually.

References: bsc#964456

Signed-off-by: Hannes Reinecke <hare@suse.com>
---
 dracut.cmdline.7.asc                   |  9 ++++++++-
 modules.d/95zfcp_rules/module-setup.sh | 23 +++++++++++++++++++----
 modules.d/95zfcp_rules/parse-zfcp.sh   |  1 +
 3 files changed, 28 insertions(+), 5 deletions(-)

Index: dracut-044/dracut.cmdline.7.asc
===================================================================
--- dracut-044.orig/dracut.cmdline.7.asc	2016-04-12 15:48:42.072804543 +0200
+++ dracut-044/dracut.cmdline.7.asc	2016-04-12 15:48:46.869076048 +0200
@@ -771,12 +771,19 @@ DASD
 ZFCP
 ~~~~
 **rd.zfcp=**__<zfcp adaptor device bus ID>__,__<WWPN>__,__<FCPLUN>__::
-    rd.zfcp can be specified multiple times on the kernel command line.
+    rd.zfcp can be specified multiple times on the kernel command
+    line.
+
+**rd.zfcp=**__<zfcp adaptor device bus ID>__::
+    If NPIV is enabled and the 'allow_lun_scan' parameter to the zfcp
+    module is set to 'Y' then the zfcp adaptor will be initiating a
+    scan internally and the <WWPN> and <FCPLUN> parameters can be omitted.
 +
 [listing]
 .Example
 --
 rd.zfcp=0.0.4000,0x5005076300C213e9,0x5022000000000000
+rd.zfcp=0.0.4000
 --
 
 **rd.zfcp.conf=0**::
Index: dracut-044/modules.d/95zfcp_rules/module-setup.sh
===================================================================
--- dracut-044.orig/modules.d/95zfcp_rules/module-setup.sh	2016-04-12 15:48:42.072804543 +0200
+++ dracut-044/modules.d/95zfcp_rules/module-setup.sh	2016-04-12 15:48:46.869076048 +0200
@@ -5,15 +5,30 @@ cmdline() {
     is_zfcp() {
         local _dev=$1
         local _devpath=$(cd -P /sys/dev/block/$_dev ; echo $PWD)
-        local _sdev _lun _wwpn _ccw
+        local _sdev _scsiid _hostno _lun _wwpn _ccw _port_type
+        local _allow_lun_scan _is_npiv
 
+        _allow_lun_scan=$(cat /sys/module/zfcp/parameters/allow_lun_scan)
         [ "${_devpath#*/sd}" == "$_devpath" ] && return 1
         _sdev="${_devpath%%/block/*}"
         [ -e ${_sdev}/fcp_lun ] || return 1
-        _lun=$(cat ${_sdev}/fcp_lun)
-        _wwpn=$(cat ${_sdev}/wwpn)
+        _scsiid="${_sdev##*/}"
+        _hostno="${_scsiid%%:*}"
+        [ -d /sys/class/fc_host/host${_hostno} ] || return 1
+        _port_type=$(cat /sys/class/fc_host/host${_hostno}/port_type)
+        case "$_port_type" in
+            NPIV*)
+                _is_npiv=1
+                ;;
+        esac
         _ccw=$(cat ${_sdev}/hba_id)
-        echo "rd.zfcp=${_ccw},${_wwpn},${_lun}"
+        if [ "$_is_npiv" ] && [ "$_allow_lun_scan" = "Y" ] ; then
+            echo "rd.zfcp=${_ccw}"
+        else
+            _lun=$(cat ${_sdev}/fcp_lun)
+            _wwpn=$(cat ${_sdev}/wwpn)
+            echo "rd.zfcp=${_ccw},${_wwpn},${_lun}"
+        fi
         return 0
     }
     [[ $hostonly ]] || [[ $mount_needs ]] && {
Index: dracut-044/modules.d/95zfcp_rules/parse-zfcp.sh
===================================================================
--- dracut-044.orig/modules.d/95zfcp_rules/parse-zfcp.sh	2016-04-12 15:48:42.072804543 +0200
+++ dracut-044/modules.d/95zfcp_rules/parse-zfcp.sh	2016-04-12 15:48:46.869076048 +0200
@@ -31,6 +31,7 @@ ACTION=="add", SUBSYSTEM=="drivers", KER
 ACTION=="add", ENV{COLLECT_$ccw}=="0", ATTR{[ccw/$ccw]online}="1"
 EOF
     fi
+    [ -z "$wwpn" -o -z "$lun" ] && return
     m=$(sed -n "/.*${wwpn}.*${lun}.*/p" $_rule)
     if [ -z "$m" ] ; then
         cat >> $_rule <<EOF