From f67758160e36466b67ffcc8c09e6f62e4fecf747 Mon Sep 17 00:00:00 2001 From: Steffen Maier Date: Thu, 21 Feb 2019 17:13:02 +0100 Subject: [PATCH] lszfcp: allow to show zfcp_units without associated SCSI device MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Useful to detect configuration errors and FCP LUN typos. Example: $ lszfcp -De 0.0.3c80/0x500507630313d327/0xffffffffffffffff - failed $ lszfcp -DeV /sys/devices/css0/0.0.0222/0.0.3c80/0x500507630313d327/0xffffffffffffffff failed - $ lszfcp -Deam 0.0.3c80/0x500507630313d327/0xffffffffffffffff - failed Class = "zfcp_unit" access_denied = "0" access_readonly = "0" access_shared = "0" failed = "1" in_recovery = "0" status = "0x00000000" Signed-off-by: Steffen Maier Reviewed-by: Jens Remus Signed-off-by: Jan Höppner --- zconf/lszfcp | 54 +++++++++++++++++++++++++++++++++++++++++++++++++- zconf/lszfcp.8 | 3 ++- 2 files changed, 55 insertions(+), 2 deletions(-) diff --git a/zconf/lszfcp b/zconf/lszfcp index 4b5da9f7..e31d8dde 100755 --- a/zconf/lszfcp +++ b/zconf/lszfcp @@ -344,7 +344,15 @@ show_devices() SCSI_DEVICE_LIST=`ls -d $SYSFS/devices/css0/*/*/host[0-9]*/*/` fi - if [ -z "$SCSI_DEVICE_LIST" ]; then + if $SHOW_EXTENDED; then + ZFCP_UNIT_LIST=$(ls -d \ + $SYSFS/devices/css[0-9]*/[0-9d]*/[0-9]*/0x*/0x* \ + 2> /dev/null) + else + ZFCP_UNIT_LIST="" + fi + + if [ -z "$SCSI_DEVICE_LIST" ] && [ -z "$ZFCP_UNIT_LIST" ]; then if $SHOW_EXTENDED; then echo "Error: No zfcp-attached SCSI devices found." else @@ -357,6 +365,20 @@ show_devices() read WWPN < $SCSI_DEVICE_PATH/wwpn read LUN < $SCSI_DEVICE_PATH/fcp_lun + # remove from ZFCP_UNIT_LIST if SCSI device exists + REDUCED_LIST="" + for UNIT_PATH in $ZFCP_UNIT_LIST; do + STRIPPED_PATH=$UNIT_PATH + L=${UNIT_PATH##*/} + STRIPPED_PATH=${STRIPPED_PATH%/*} + W=${STRIPPED_PATH##*/} + STRIPPED_PATH=${STRIPPED_PATH%/*} + A=${STRIPPED_PATH##*/} + [ "$A/$W/$L" = "$ADAPTER/$WWPN/$LUN" ] && continue + REDUCED_LIST="$REDUCED_LIST $UNIT_PATH" + done + ZFCP_UNIT_LIST="$REDUCED_LIST" + [ $LUN != ${PAR_LUN:-$LUN} ] && continue [ $WWPN != ${PAR_WWPN:-$WWPN} ] && continue [ $ADAPTER != ${PAR_BUSID:-$ADAPTER} ] && continue @@ -426,6 +448,36 @@ show_devices() echo fi done + + # what's left in ZFCP_UNIT_LIST are now units without SCSI device + for UNIT_PATH in $ZFCP_UNIT_LIST; do + STRIPPED_PATH=$UNIT_PATH + LUN=${UNIT_PATH##*/} + STRIPPED_PATH=${STRIPPED_PATH%/*} + WWPN=${STRIPPED_PATH##*/} + STRIPPED_PATH=${STRIPPED_PATH%/*} + ADAPTER=${STRIPPED_PATH##*/} + + [ $LUN != ${PAR_LUN:-$LUN} ] && continue + [ $WWPN != ${PAR_WWPN:-$WWPN} ] && continue + [ $ADAPTER != ${PAR_BUSID:-$ADAPTER} ] && continue + + if [ $VERBOSITY -eq 0 ]; then + echo "$ADAPTER/$WWPN/$LUN - failed" + else + echo "$UNIT_PATH failed" + echo "-" + fi + + if $SHOW_ATTRIBUTES && [ $SHOW_MORE_ATTRS -ge 1 ]; then + echo 'Class = "zfcp_unit"' + show_attributes "$UNIT_PATH" + fi + + if $SHOW_ATTRIBUTES; then + echo + fi + done } diff --git a/zconf/lszfcp.8 b/zconf/lszfcp.8 index 0b91ed07..2ad4f3ac 100644 --- a/zconf/lszfcp.8 +++ b/zconf/lszfcp.8 @@ -56,7 +56,8 @@ not enumerated: hosts that have never been online (since last bind to zfcp device driver), hosts that are defunct (CHPID configured off, or z/VM detach), -ports with fc_rport port_state unequal to "Online" (such as fibres pulled). +ports with fc_rport port_state unequal to "Online" (such as fibres pulled), +zfcp units without associated SCSI device (unit_add of non-existent LUN). .SH OPTIONS .TP