Hello community, here is the log from the commit of package s390-tools for openSUSE:Factory checked in at 2018-09-20 11:37:11 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/s390-tools (Old) and /work/SRC/openSUSE:Factory/.s390-tools.new (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "s390-tools" Thu Sep 20 11:37:11 2018 rev:20 rq:635597 version:2.1.0 Changes: -------- --- /work/SRC/openSUSE:Factory/s390-tools/s390-tools.changes 2018-07-13 10:15:35.742045015 +0200 +++ /work/SRC/openSUSE:Factory/.s390-tools.new/s390-tools.changes 2018-09-20 11:37:17.933003367 +0200 @@ -1,0 +2,39 @@ +Fri Aug 31 18:57:54 UTC 2018 - [email protected] + +- Added the following patch for bsc#1094354 + * customize-zdev-root-update-script.patch +- Modified ctc_configure to not pass a "protcol=" parameter when + configuring LCS devices. (bsc#1096520) +- Added the following patches for bsc#1098069 + * s390-tools-sles15-dbginfo-add-data-for-ps-cpprot.patch + * s390-tools-sles15-mon_procd-fix-parsing-of-proc-pid-stat.patch + * s390-tools-sles15-1-lstape-fix-output-with-SCSI-lin_tape-and-multiple-pa.patch + * s390-tools-sles15-2-lstape-fix-to-prefer-sysfs-to-find-lin_tape-device-n.patch + * s390-tools-sles15-3-lstape-fix-output-without-SCSI-generic-sg.patch + * s390-tools-sles15-4-lsluns-fix-to-prevent-error-messages-if-there-are-no.patch + * s390-tools-sles15-5-lstape-fix-to-prevent-error-messages-if-there-are-no.patch + * s390-tools-sles15-6-lstape-fix-description-of-type-and-devbusid-filter-f.patch + * s390-tools-sles15-7-lstape-fix-SCSI-output-description-in-man-page.patch + * s390-tools-sles15-8-lstape-fix-SCSI-HBA-CCW-device-bus-ID-e.g.-for-virti.patch + +------------------------------------------------------------------- +Tue Aug 7 04:44:12 UTC 2018 - [email protected] + +- dasd_reload: Fixed several syntax errors. Changed the script to + ensure that the DASD volume are actually activated in device + number order. If an old 51-dasd-<ccw>.rules file is found, + rename it to obsolete-51-dasd-<ccw>.rules, and use chzdev to + generate a new rules file. (bsc#1103407) + +------------------------------------------------------------------- +Mon Aug 6 12:42:14 CEST 2018 - [email protected] + +- dasd_reload: Check for 41-dasd-<type>-<ccw>.rules in addition + to the original 51-dasd-<ccw>.rules (bsc#1103407) + +------------------------------------------------------------------- +Fri Jul 27 17:56:14 UTC 2018 - [email protected] + +- Removed s390 from the ExclusiveArch parameter (bsc#1102906) + +------------------------------------------------------------------- New: ---- customize-zdev-root-update-script.patch s390-tools-sles15-1-lstape-fix-output-with-SCSI-lin_tape-and-multiple-pa.patch s390-tools-sles15-2-lstape-fix-to-prefer-sysfs-to-find-lin_tape-device-n.patch s390-tools-sles15-3-lstape-fix-output-without-SCSI-generic-sg.patch s390-tools-sles15-4-lsluns-fix-to-prevent-error-messages-if-there-are-no.patch s390-tools-sles15-5-lstape-fix-to-prevent-error-messages-if-there-are-no.patch s390-tools-sles15-6-lstape-fix-description-of-type-and-devbusid-filter-f.patch s390-tools-sles15-7-lstape-fix-SCSI-output-description-in-man-page.patch s390-tools-sles15-8-lstape-fix-SCSI-HBA-CCW-device-bus-ID-e.g.-for-virti.patch s390-tools-sles15-dbginfo-add-data-for-ps-cpprot.patch s390-tools-sles15-mon_procd-fix-parsing-of-proc-pid-stat.patch ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ s390-tools.spec ++++++ --- /var/tmp/diff_new_pack.MReJYX/_old 2018-09-20 11:37:19.041002713 +0200 +++ /var/tmp/diff_new_pack.MReJYX/_new 2018-09-20 11:37:19.041002713 +0200 @@ -141,9 +141,21 @@ Patch31: s390-tools-sles15-zdev-Enable-running-chzdev-from-unknown-root-devices.patch Patch32: s390-tools-sles15-zdev-Fix-zdev-dracut-module-aborting-on-unknown-root.patch Patch33: s390-tools-sles15-hmcdrvfs-fix-parsing-of-link-count.patch +Patch34: s390-tools-sles15-dbginfo-add-data-for-ps-cpprot.patch +Patch35: s390-tools-sles15-mon_procd-fix-parsing-of-proc-pid-stat.patch +Patch36: s390-tools-sles15-1-lstape-fix-output-with-SCSI-lin_tape-and-multiple-pa.patch +Patch37: s390-tools-sles15-2-lstape-fix-to-prefer-sysfs-to-find-lin_tape-device-n.patch +Patch38: s390-tools-sles15-3-lstape-fix-output-without-SCSI-generic-sg.patch +Patch39: s390-tools-sles15-4-lsluns-fix-to-prevent-error-messages-if-there-are-no.patch +Patch40: s390-tools-sles15-5-lstape-fix-to-prevent-error-messages-if-there-are-no.patch +Patch41: s390-tools-sles15-6-lstape-fix-description-of-type-and-devbusid-filter-f.patch +Patch42: s390-tools-sles15-7-lstape-fix-SCSI-output-description-in-man-page.patch +Patch43: s390-tools-sles15-8-lstape-fix-SCSI-HBA-CCW-device-bus-ID-e.g.-for-virti.patch + +Patch999: customize-zdev-root-update-script.patch BuildRoot: %{_tmppath}/%{name}-%{version}-build -ExclusiveArch: s390 s390x +ExclusiveArch: s390x %description This package contains the tools needed to use Linux on IBM z Systems @@ -230,6 +242,18 @@ %patch31 -p1 %patch32 -p1 %patch33 -p1 +%patch34 -p1 +%patch35 -p1 +%patch36 -p1 +%patch37 -p1 +%patch38 -p1 +%patch39 -p1 +%patch40 -p1 +%patch41 -p1 +%patch42 -p1 +%patch43 -p1 + +%patch999 -p1 cp -vi %{S:22} CAUTION ++++++ ctc_configure ++++++ --- /var/tmp/diff_new_pack.MReJYX/_old 2018-09-20 11:37:19.161002642 +0200 +++ /var/tmp/diff_new_pack.MReJYX/_new 2018-09-20 11:37:19.165002640 +0200 @@ -88,11 +88,6 @@ exit 1 fi -if [ -z "${CTC_MODE}" ]; then - PARM_LIST="${PARM_LIST} protocol=0" -else PARM_LIST="${PARM_LIST} protocol=${CTC_MODE}" -fi - if [ -f /sys/bus/ccw/devices/${CTC_READ_CHAN}/cutype ]; then read CU_TYPE < /sys/bus/ccw/devices/${CTC_READ_CHAN}/cutype else mesg "Psuedo file/sys/bus/ccw/devices/${CTC_READ_CHAN}/cutype doesn't exist." @@ -100,9 +95,14 @@ exit 1 fi +PARM_LIST="" if [ "${CU_TYPE}" == "3088/01" ] || [ "${CU_TYPE}" == "3088/60" ]; then DEV_TYPE="lcs" else DEV_TYPE="ctc" + if [ -z "${CTC_MODE}" ]; then + PARM_LIST="${PARM_LIST} protocol=0" + else PARM_LIST="${PARM_LIST} protocol=${CTC_MODE}" + fi fi if [ "${ON_OFF}" == 0 ]; then ++++++ customize-zdev-root-update-script.patch ++++++ --- s390-tools-2.1.0/zdev/src/zdev-root-update.dracut 2017-09-25 08:15:15.000000000 -0400 +++ s390-tools-2.1.0/zdev/src/zdev-root-update.dracut 2018-08-23 21:33:40.847755927 -0400 @@ -20,10 +20,4 @@ exit 1 } -echo "Installing IPL record" -zipl --noninteractive || { - echo "${TOOLNAME}: Error: Could not install IPL record" >&2 - exit 1 -} - exit 0 ++++++ dasd_reload ++++++ --- /var/tmp/diff_new_pack.MReJYX/_old 2018-09-20 11:37:19.205002616 +0200 +++ /var/tmp/diff_new_pack.MReJYX/_new 2018-09-20 11:37:19.205002616 +0200 @@ -50,16 +50,16 @@ dasd_alias= let EXITRC=0 for dev in /sys/bus/ccw/devices/*; do - if [ -f $dev/use_diag ]; then - read _online < $dev/online - read _alias < $dev/alias + if [ -f ${dev}/use_diag ]; then + read _online < ${dev}/online + read _alias < ${dev}/alias if [ "$_online" -eq 1 -a "$_alias" -eq 1 ]; then - echo "setting DASD HyperPAV alias $(basename $dev) offline" - echo "0" > $dev/online - read _online < $dev/online - dasd_alias="$dasd_alias $(basename $dev)" + echo "setting DASD HyperPAV alias $(basename ${dev}) offline" + echo "0" > ${dev}/online + read _online < ${dev}/online + dasd_alias="${dasd_alias} $(basename ${dev})" if [ "$_online" -eq 1 ]; then - echo "failure on setting DASD HyperPAV alias $(basename $dev) offline !" + echo "failure on setting DASD HyperPAV alias $(basename ${dev}) offline !" let EXITRC=4 fi fi @@ -71,16 +71,16 @@ # dasd_base= for dev in /sys/bus/ccw/devices/*; do - if [ -f $dev/use_diag ]; then - read _online < $dev/online - read _alias < $dev/alias + if [ -f ${dev}/use_diag ]; then + read _online < ${dev}/online + read _alias < ${dev}/alias if [ "$_online" -eq 1 -a "$_alias" -eq 0 ]; then - echo "setting DASD $(basename $dev) offline" - echo "0" > $dev/online - read _online < $dev/online - dasd_base="$dasd_base $(basename $dev)" + echo "setting DASD $(basename ${dev}) offline" + echo "0" > ${dev}/online + read _online < ${dev}/online + dasd_base="${dasd_base} $(basename ${dev})" if [ "$_online" -eq 1 ]; then - echo "failure on setting DASD $(basename $dev) offline !" + echo "failure on setting DASD $(basename ${dev}) offline !" let EXITRC=4 fi fi @@ -91,46 +91,65 @@ module_list= module_test_list="dasd_diag_mod dasd_eckd_mod dasd_fba_mod dasd_mod" -for module in $module_test_list; do - if grep -q "$module" /proc/modules; then - module_list="$module $module_list" - : Unloading $module - /sbin/rmmod $module +for module in ${module_test_list}; do + if grep -q "${module}" /proc/modules; then + module_list="${module} ${module_list}" + : Unloading ${module} + /sbin/rmmod ${module} fi done +udevadm settle +sleep 2 + if [ -d /etc/udev/rules.d ]; then cd /etc/udev/rules.d # # Re-activating "normal" DASD and HyperPAV base devices # - for dasd in $dasd_base; do - file="51-dasd-${dasd}.rules" - if [ -f "$file" ] ; then - echo Activating $dasd - if grep -q use_diag $file ; then - DASD_USE_DIAG=1 - else - DASD_USE_DIAG=0 +# We need to move all the DASD udev rules out from /etc/udev/rules.d +# because if we don't, then when the first DASD volume gets brought +# back online, they are all brought back online, in a non-deterministic +# order, not the numeric order we expect. +# + mv -i 41-dasd-*.rules 51-dasd-*.rules /tmp + cd /tmp + for dasd in ${dasd_base}; do + for file in 41-dasd-*-${dasd}.rules 51-dasd-${dasd}.rules; do + [ -f "${file}" ] || continue +# +# Special handling is needed for old udev rules that start with 51- +# since the chzdev command won't look for that name +# + prefix="$(echo ${file} | cut -f1 -d-)" + if [ "${prefix}" == "51" ]; then + if [ -h /sys/bus/ccw/drivers/dasd-eckd/${dasd} ]; then + mv -i ${file} 41-dasd-eckd-${dasd}.rules + elif [ -h /sys/bus/ccw/drivers/dasd-fba/${dasd} ]; then + mv -i ${file} 41-dasd-fba-${dasd}.rules + else echo "DASD volume ${dasd} is neither an ECKD or FBA device." + let EXITRC=4 + fi fi - /sbin/dasd_configure $dasd 1 $DASD_USE_DIAG - fi + echo Activating ${dasd} + mv -i "${file}" /etc/udev/rules.d/ + /sbin/chzdev dasd --apply --configured -q --no-root-update ${dasd} + lsdasd + break + done done # # Re-activating HyperPAV alias devices # - for dasd in $dasd_alias; do - file="51-dasd-${dasd}.rules" - if [ -f "$file" ] ; then - echo Activating $dasd - if grep -q use_diag $file ; then - DASD_USE_DIAG=1 - else - DASD_USE_DIAG=0 - fi - /sbin/dasd_configure $dasd 1 $DASD_USE_DIAG - fi + for dasd in ${dasd_alias}; do + for file in 41-dasd-*-${dasd}.rules 51-dasd-${dasd}.rules; do + [ -f "${file}" ] || continue + echo Activating ${dasd} + mv -i "${file}" /etc/udev/rules.d/ + /sbin/chzdev dasd --apply --configured -q --no-root-update ${dasd} + break + done done fi ++++++ s390-tools-sles15-1-lstape-fix-output-with-SCSI-lin_tape-and-multiple-pa.patch ++++++ Subject: lstape, lsluns: handle non-zfcp; lin_tape multiple paths From: Steffen Maier <[email protected]> Description: lstape, lsluns: handle non-zfcp; lin_tape multiple paths Symptom: lstape shows unexpected additional Device suffix numbers in excess output columns for each additional path of the same tape/changer driven by the IBM lin_tape device driver (independent of actual path failover enablement in lin_tape). It also shows a wrong number of found devices in the header (without --scsi-only). lstape prints error about "Unexpected extra argument:" and the usage for "sg_inq" along with wrong tabular output. lsluns prints ENOENT error text for "cat" on SCSI device sysfs attributes hba_id, wwpn, and fcp_lun. lstape with --verbose option prints ENOENT error text for "cat" on SCSI device sysfs attributes hba_id and wwpn. lstape man page: Description of --type and <devbusid> filter for channel tapes is incomplete. SCSI output description is incomplete. lstape shows "N/A" instead of the HBA device bus-ID with virtio-scsi-ccw. Problem: s390-tools-1.8.0 before the first upstream commit b627b8d8e1ab ("Initial s390-tools-2.0.0 import") introduced SCSI tape/changer output for lstape. It used the SCSI device serial number as lookup key to find a match in IBM lin_tape device driver proc-fs output for a given SCSI device name. Multiple paths to the same tape/changer have the same serial number. Multiple matches cause excess arguments to printf. Explaining the resulting output, the bash man page says: "The format is reused as necessary to consume all of the arguments." This also causes a wrong number of found devices. The default bash settings have nullglob disabled so if $SCSI_DEV/scsi_generic* aka /sys/bus/scsi/devices/*:*:*:*/scsi_generic* does not match anything, it leaves the glob pattern unmodified and SG_DEV=$(basename $SG_DEV/*) results in the literal "*". If $SG_INQ exists, it invoked sg_inq with more than the one allowed positional argument for a SCSI generic device node "sg_inq /dev/*". Causing error messages and the usage of sg_inq to land in $TAPE_SERIAL. lsluns iterates SCSI generic devices and unconditionally reads zfcp-specific SCSI device sysfs attributes hba_id, wwpn, and fcp_lun. lstape --verbose unconditionally reads zfcp-specific SCSI device sysfs attributes hba_id and wwpn. <devbusid> filter missing from synopsis. <device-type> example at wrong place with <devbusid> filter. <devbusid> filter option description is a duplicate of <device-type> filter option description. SCSI output description misses fields. Lstape only used the zfcp-specific sysfs attribute hba_id. Solution: Prefer sysfs to find lin_tape device name for SCSI device. Fallback: The lin_tape proc-fs output format has changed over the years. The HBA device driver string can contain whitespace (e.g. "Virtio SCSI HBA") and breaks the field numbers with tokenized parsing. Grep for the SCSI device name as word (to skip names with same substring, such as 0:0:1:1 also matching 0:0:1:10) and cut the first field 'Number' (lin_tape device name suffix). If there is no SCSI column at all [lin_tape before v2.2.0] (and no SCSI LLDD or other column with a name accidentally matching an existing SCSI device name), we get no match and better bail out with the initialized "N/A" for the lstape column "Device". To not have to rely on the nullglob setting, explicitly check for the existence of $SCSI_DEV/scsi_generic before evaluating SG_DEV=$(basename $SG_DEV/*). Also handle availability of sg_inq but absence of scsi_generic individually to provide the user with a hint if only sg is missing. Simply skip non-zfcp SCSI devices, such as iSCSI or virtio-scsi-ccw, to not erroneously access absent attributes. Assume "N/A" for HBA and WWPN of non-zfcp SCSI devices, such as iSCSI or virtio-scsi-ccw, to not erroneously access absent zfcp-specific sysfs attributes. Add <devbusid> filter to synopsis. Move <device-type> example to <device-type> option. Replace <devbusid> filter option description. Move existing SCSI output description to a new subsection and add description of missing fields. Also search sysfs for an ancestor with subsystem ccw. Reproduction: Attach more than one path to the same SCSI tape or changer and load the IBM lin_tape device driver. Unload sg kernel module. Attach non-zfcp SCSI devices such as iSCSI or virtio-scsi-ccw. Attach non-zfcp SCSI devices such as iSCSI or virtio-scsi-ccw. man lstape Attach SCSI tape or changer with virtio-scsi-ccw to a KVM guest and run "lstape --verbose". Upstream-ID: - Problem-ID: 170633 Signed-off-by: Steffen Maier <[email protected]> --- zconf/lstape | 11 ++++------- zconf/lstape.8 | 7 ++----- 2 files changed, 6 insertions(+), 12 deletions(-) --- a/zconf/lstape +++ b/zconf/lstape @@ -2,7 +2,7 @@ # # lstape - Tool to show information about tape devices # -# Copyright IBM Corp. 2003, 2017 +# Copyright IBM Corp. 2003, 2018 # # s390-tools is free software; you can redistribute it and/or modify # it under the terms of the MIT license. See LICENSE for details. @@ -55,7 +55,7 @@ function PrintVersion() { cat <<-EOD $CMD: version %S390_TOOLS_VERSION% - Copyright IBM Corp. 2003, 2017 + Copyright IBM Corp. 2003, 2018 EOD } @@ -292,16 +292,13 @@ function SysfsCreateListSCSI() TAPE_DEV=$CHG_IDX fi elif [ -r /proc/scsi/$DEV_NAME ]; then - if [ "$TAPE_SERIAL" != "NO/INQ" ]; then IBM_IDX=$( - awk '$3 == "'$TAPE_SERIAL'"{ - print $1 - }' /proc/scsi/$DEV_NAME + grep -wF "$SCSI_ID" /proc/scsi/$DEV_NAME | + cut -d ' ' -f 1 ) if [ "$IBM_IDX" != "" ]; then TAPE_DEV=$DEV_NAME$IBM_IDX fi - fi fi printf "$SCSIFORMAT" \ --- a/zconf/lstape.8 +++ b/zconf/lstape.8 @@ -1,8 +1,8 @@ -.\" Copyright 2017 IBM Corp. +.\" Copyright 2017, 2018 IBM Corp. .\" s390-tools is free software; you can redistribute it and/or modify .\" it under the terms of the MIT license. See LICENSE for details. .\" -.TH LSTAPE 8 "Jul 2007" "s390-tools" +.TH LSTAPE 8 "Jun 2018" "s390-tools" .SH NAME lstape \- list tape devices. @@ -34,9 +34,6 @@ lstape command tries to find out which o and changer driver the device names start with "st" or "sch", while for the IBM tape driver this would be "IBMtape" or "IBMchanger". If "N/A" is shown, the correct driver could not be obtained. -This happens for example if there is no sg_inq command installed which is -required to read the drive's serial number which in turn is used to find out -the device number of the IBM tape driver. The serial number of a SCSI tape can be displayed with the --verbose option. If there is no sg_inq command available "NO/INQ" is shown as the tape's serial. ++++++ s390-tools-sles15-2-lstape-fix-to-prefer-sysfs-to-find-lin_tape-device-n.patch ++++++ Subject: lstape, lsluns: handle non-zfcp; lin_tape multiple paths From: Steffen Maier <[email protected]> Description: lstape, lsluns: handle non-zfcp; lin_tape multiple paths Symptom: lstape shows unexpected additional Device suffix numbers in excess output columns for each additional path of the same tape/changer driven by the IBM lin_tape device driver (independent of actual path failover enablement in lin_tape). It also shows a wrong number of found devices in the header (without --scsi-only). lstape prints error about "Unexpected extra argument:" and the usage for "sg_inq" along with wrong tabular output. lsluns prints ENOENT error text for "cat" on SCSI device sysfs attributes hba_id, wwpn, and fcp_lun. lstape with --verbose option prints ENOENT error text for "cat" on SCSI device sysfs attributes hba_id and wwpn. lstape man page: Description of --type and <devbusid> filter for channel tapes is incomplete. SCSI output description is incomplete. lstape shows "N/A" instead of the HBA device bus-ID with virtio-scsi-ccw. Problem: s390-tools-1.8.0 before the first upstream commit b627b8d8e1ab ("Initial s390-tools-2.0.0 import") introduced SCSI tape/changer output for lstape. It used the SCSI device serial number as lookup key to find a match in IBM lin_tape device driver proc-fs output for a given SCSI device name. Multiple paths to the same tape/changer have the same serial number. Multiple matches cause excess arguments to printf. Explaining the resulting output, the bash man page says: "The format is reused as necessary to consume all of the arguments." This also causes a wrong number of found devices. The default bash settings have nullglob disabled so if $SCSI_DEV/scsi_generic* aka /sys/bus/scsi/devices/*:*:*:*/scsi_generic* does not match anything, it leaves the glob pattern unmodified and SG_DEV=$(basename $SG_DEV/*) results in the literal "*". If $SG_INQ exists, it invoked sg_inq with more than the one allowed positional argument for a SCSI generic device node "sg_inq /dev/*". Causing error messages and the usage of sg_inq to land in $TAPE_SERIAL. lsluns iterates SCSI generic devices and unconditionally reads zfcp-specific SCSI device sysfs attributes hba_id, wwpn, and fcp_lun. lstape --verbose unconditionally reads zfcp-specific SCSI device sysfs attributes hba_id and wwpn. <devbusid> filter missing from synopsis. <device-type> example at wrong place with <devbusid> filter. <devbusid> filter option description is a duplicate of <device-type> filter option description. SCSI output description misses fields. Lstape only used the zfcp-specific sysfs attribute hba_id. Solution: Prefer sysfs to find lin_tape device name for SCSI device. Fallback: The lin_tape proc-fs output format has changed over the years. The HBA device driver string can contain whitespace (e.g. "Virtio SCSI HBA") and breaks the field numbers with tokenized parsing. Grep for the SCSI device name as word (to skip names with same substring, such as 0:0:1:1 also matching 0:0:1:10) and cut the first field 'Number' (lin_tape device name suffix). If there is no SCSI column at all [lin_tape before v2.2.0] (and no SCSI LLDD or other column with a name accidentally matching an existing SCSI device name), we get no match and better bail out with the initialized "N/A" for the lstape column "Device". To not have to rely on the nullglob setting, explicitly check for the existence of $SCSI_DEV/scsi_generic before evaluating SG_DEV=$(basename $SG_DEV/*). Also handle availability of sg_inq but absence of scsi_generic individually to provide the user with a hint if only sg is missing. Simply skip non-zfcp SCSI devices, such as iSCSI or virtio-scsi-ccw, to not erroneously access absent attributes. Assume "N/A" for HBA and WWPN of non-zfcp SCSI devices, such as iSCSI or virtio-scsi-ccw, to not erroneously access absent zfcp-specific sysfs attributes. Add <devbusid> filter to synopsis. Move <device-type> example to <device-type> option. Replace <devbusid> filter option description. Move existing SCSI output description to a new subsection and add description of missing fields. Also search sysfs for an ancestor with subsystem ccw. Reproduction: Attach more than one path to the same SCSI tape or changer and load the IBM lin_tape device driver. Unload sg kernel module. Attach non-zfcp SCSI devices such as iSCSI or virtio-scsi-ccw. Attach non-zfcp SCSI devices such as iSCSI or virtio-scsi-ccw. man lstape Attach SCSI tape or changer with virtio-scsi-ccw to a KVM guest and run "lstape --verbose". Upstream-ID: - Problem-ID: 170633 Signed-off-by: Steffen Maier <[email protected]> --- zconf/lstape | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) --- a/zconf/lstape +++ b/zconf/lstape @@ -291,6 +291,23 @@ function SysfsCreateListSCSI() if [ "$CHG_IDX" != "" ]; then TAPE_DEV=$CHG_IDX fi + elif [ "$(echo "$SCSI_LIST"|grep lin_tape)" != "" ]; then + # bash glob sorts so IBMtape0 comes before IBMtape0n + local IBM_PATH=$( + ls -1d $SCSI_DEV/lin_tape/$DEV_NAME[0-9]* | + head -n 1) + if [ -d "$IBM_PATH" ]; then + IBM_IDX=${IBM_PATH##*/} + else + # deprecated sysfs layout + IBM_IDX=$( + echo "$SCSI_LIST" | + awk -F: '/lin_tape\:'"$DEV_NAME"'[0-9]+$/{print $NF}' + ) + fi + if [ "$IBM_IDX" != "" ]; then + TAPE_DEV=$IBM_IDX + fi elif [ -r /proc/scsi/$DEV_NAME ]; then IBM_IDX=$( grep -wF "$SCSI_ID" /proc/scsi/$DEV_NAME | ++++++ s390-tools-sles15-3-lstape-fix-output-without-SCSI-generic-sg.patch ++++++ Subject: [PATCH] [BZ 170633] lstape, lsluns: handle non-zfcp; lin_tape multiple paths From: Steffen Maier <[email protected]> Description: lstape, lsluns: handle non-zfcp; lin_tape multiple paths Symptom: lstape shows unexpected additional Device suffix numbers in excess output columns for each additional path of the same tape/changer driven by the IBM lin_tape device driver (independent of actual path failover enablement in lin_tape). It also shows a wrong number of found devices in the header (without --scsi-only). lstape prints error about "Unexpected extra argument:" and the usage for "sg_inq" along with wrong tabular output. lsluns prints ENOENT error text for "cat" on SCSI device sysfs attributes hba_id, wwpn, and fcp_lun. lstape with --verbose option prints ENOENT error text for "cat" on SCSI device sysfs attributes hba_id and wwpn. lstape man page: Description of --type and <devbusid> filter for channel tapes is incomplete. SCSI output description is incomplete. lstape shows "N/A" instead of the HBA device bus-ID with virtio-scsi-ccw. Problem: s390-tools-1.8.0 before the first upstream commit b627b8d8e1ab ("Initial s390-tools-2.0.0 import") introduced SCSI tape/changer output for lstape. It used the SCSI device serial number as lookup key to find a match in IBM lin_tape device driver proc-fs output for a given SCSI device name. Multiple paths to the same tape/changer have the same serial number. Multiple matches cause excess arguments to printf. Explaining the resulting output, the bash man page says: "The format is reused as necessary to consume all of the arguments." This also causes a wrong number of found devices. The default bash settings have nullglob disabled so if $SCSI_DEV/scsi_generic* aka /sys/bus/scsi/devices/*:*:*:*/scsi_generic* does not match anything, it leaves the glob pattern unmodified and SG_DEV=$(basename $SG_DEV/*) results in the literal "*". If $SG_INQ exists, it invoked sg_inq with more than the one allowed positional argument for a SCSI generic device node "sg_inq /dev/*". Causing error messages and the usage of sg_inq to land in $TAPE_SERIAL. lsluns iterates SCSI generic devices and unconditionally reads zfcp-specific SCSI device sysfs attributes hba_id, wwpn, and fcp_lun. lstape --verbose unconditionally reads zfcp-specific SCSI device sysfs attributes hba_id and wwpn. <devbusid> filter missing from synopsis. <device-type> example at wrong place with <devbusid> filter. <devbusid> filter option description is a duplicate of <device-type> filter option description. SCSI output description misses fields. Lstape only used the zfcp-specific sysfs attribute hba_id. Solution: Prefer sysfs to find lin_tape device name for SCSI device. Fallback: The lin_tape proc-fs output format has changed over the years. The HBA device driver string can contain whitespace (e.g. "Virtio SCSI HBA") and breaks the field numbers with tokenized parsing. Grep for the SCSI device name as word (to skip names with same substring, such as 0:0:1:1 also matching 0:0:1:10) and cut the first field 'Number' (lin_tape device name suffix). If there is no SCSI column at all [lin_tape before v2.2.0] (and no SCSI LLDD or other column with a name accidentally matching an existing SCSI device name), we get no match and better bail out with the initialized "N/A" for the lstape column "Device". To not have to rely on the nullglob setting, explicitly check for the existence of $SCSI_DEV/scsi_generic before evaluating SG_DEV=$(basename $SG_DEV/*). Also handle availability of sg_inq but absence of scsi_generic individually to provide the user with a hint if only sg is missing. Simply skip non-zfcp SCSI devices, such as iSCSI or virtio-scsi-ccw, to not erroneously access absent attributes. Assume "N/A" for HBA and WWPN of non-zfcp SCSI devices, such as iSCSI or virtio-scsi-ccw, to not erroneously access absent zfcp-specific sysfs attributes. Add <devbusid> filter to synopsis. Move <device-type> example to <device-type> option. Replace <devbusid> filter option description. Move existing SCSI output description to a new subsection and add description of missing fields. Also search sysfs for an ancestor with subsystem ccw. Reproduction: Attach more than one path to the same SCSI tape or changer and load the IBM lin_tape device driver. Unload sg kernel module. Attach non-zfcp SCSI devices such as iSCSI or virtio-scsi-ccw. Attach non-zfcp SCSI devices such as iSCSI or virtio-scsi-ccw. man lstape Attach SCSI tape or changer with virtio-scsi-ccw to a KVM guest and run "lstape --verbose". Upstream-ID: - Problem-ID: 170633 Signed-off-by: Steffen Maier <[email protected]> --- zconf/lstape | 12 ++++++++++-- zconf/lstape.8 | 8 +++++++- 2 files changed, 17 insertions(+), 3 deletions(-) --- a/zconf/lstape +++ b/zconf/lstape @@ -48,6 +48,9 @@ function PrintUsage() { : -v|--version : Display the version of the tools package and : the lstape command. + : + :$(basename $0) without the --ccw-only option causes extra SAN traffic + :for each SCSI tape or changer device by invoking the sg_inq command. EOD } @@ -249,11 +252,16 @@ function SysfsCreateListSCSI() if [ -h $SG_DEV ]; then # deprecated sysfs layout SG_DEV=$(echo $SG_DEV | awk -F: '{print $NF}') - else + elif [ -d $SCSI_DEV/scsi_generic ]; then SG_DEV=$(basename $SG_DEV/*) + else + SG_DEV="" fi - if [ "$SG_INQ" != "" ]; then + if [ -z "$SG_DEV" ]; then + SG_DEV="N/A" + TAPE_SERIAL="NO/SG" + elif [ "$SG_INQ" != "" ]; then TAPE_SERIAL=$( sg_inq /dev/$SG_DEV | awk '/serial/{print $NF}' --- a/zconf/lstape.8 +++ b/zconf/lstape.8 @@ -36,7 +36,13 @@ IBM tape driver this would be "IBMtape" the correct driver could not be obtained. The serial number of a SCSI tape can be displayed with the --verbose option. If -there is no sg_inq command available "NO/INQ" is shown as the tape's serial. +there is no sg_inq command available "NO/INQ" is shown as the serial number +of the tape. +If no SCSI generic (sg) kernel support is available, "NO/SG" is shown +as the serial number of the tape and "N/A" for the "Generic" column. + +The lstape command without the --ccw-only option causes extra SAN traffic +for each SCSI tape or changer device by invoking the sg_inq command. .SH OPTIONS .TP 8 ++++++ s390-tools-sles15-4-lsluns-fix-to-prevent-error-messages-if-there-are-no.patch ++++++ Subject: lstape, lsluns: handle non-zfcp; lin_tape multiple paths From: Steffen Maier <[email protected]> Description: lstape, lsluns: handle non-zfcp; lin_tape multiple paths Symptom: lstape shows unexpected additional Device suffix numbers in excess output columns for each additional path of the same tape/changer driven by the IBM lin_tape device driver (independent of actual path failover enablement in lin_tape). It also shows a wrong number of found devices in the header (without --scsi-only). lstape prints error about "Unexpected extra argument:" and the usage for "sg_inq" along with wrong tabular output. lsluns prints ENOENT error text for "cat" on SCSI device sysfs attributes hba_id, wwpn, and fcp_lun. lstape with --verbose option prints ENOENT error text for "cat" on SCSI device sysfs attributes hba_id and wwpn. lstape man page: Description of --type and <devbusid> filter for channel tapes is incomplete. SCSI output description is incomplete. lstape shows "N/A" instead of the HBA device bus-ID with virtio-scsi-ccw. Problem: s390-tools-1.8.0 before the first upstream commit b627b8d8e1ab ("Initial s390-tools-2.0.0 import") introduced SCSI tape/changer output for lstape. It used the SCSI device serial number as lookup key to find a match in IBM lin_tape device driver proc-fs output for a given SCSI device name. Multiple paths to the same tape/changer have the same serial number. Multiple matches cause excess arguments to printf. Explaining the resulting output, the bash man page says: "The format is reused as necessary to consume all of the arguments." This also causes a wrong number of found devices. The default bash settings have nullglob disabled so if $SCSI_DEV/scsi_generic* aka /sys/bus/scsi/devices/*:*:*:*/scsi_generic* does not match anything, it leaves the glob pattern unmodified and SG_DEV=$(basename $SG_DEV/*) results in the literal "*". If $SG_INQ exists, it invoked sg_inq with more than the one allowed positional argument for a SCSI generic device node "sg_inq /dev/*". Causing error messages and the usage of sg_inq to land in $TAPE_SERIAL. lsluns iterates SCSI generic devices and unconditionally reads zfcp-specific SCSI device sysfs attributes hba_id, wwpn, and fcp_lun. lstape --verbose unconditionally reads zfcp-specific SCSI device sysfs attributes hba_id and wwpn. <devbusid> filter missing from synopsis. <device-type> example at wrong place with <devbusid> filter. <devbusid> filter option description is a duplicate of <device-type> filter option description. SCSI output description misses fields. Lstape only used the zfcp-specific sysfs attribute hba_id. Solution: Prefer sysfs to find lin_tape device name for SCSI device. Fallback: The lin_tape proc-fs output format has changed over the years. The HBA device driver string can contain whitespace (e.g. "Virtio SCSI HBA") and breaks the field numbers with tokenized parsing. Grep for the SCSI device name as word (to skip names with same substring, such as 0:0:1:1 also matching 0:0:1:10) and cut the first field 'Number' (lin_tape device name suffix). If there is no SCSI column at all [lin_tape before v2.2.0] (and no SCSI LLDD or other column with a name accidentally matching an existing SCSI device name), we get no match and better bail out with the initialized "N/A" for the lstape column "Device". To not have to rely on the nullglob setting, explicitly check for the existence of $SCSI_DEV/scsi_generic before evaluating SG_DEV=$(basename $SG_DEV/*). Also handle availability of sg_inq but absence of scsi_generic individually to provide the user with a hint if only sg is missing. Simply skip non-zfcp SCSI devices, such as iSCSI or virtio-scsi-ccw, to not erroneously access absent attributes. Assume "N/A" for HBA and WWPN of non-zfcp SCSI devices, such as iSCSI or virtio-scsi-ccw, to not erroneously access absent zfcp-specific sysfs attributes. Add <devbusid> filter to synopsis. Move <device-type> example to <device-type> option. Replace <devbusid> filter option description. Move existing SCSI output description to a new subsection and add description of missing fields. Also search sysfs for an ancestor with subsystem ccw. Reproduction: Attach more than one path to the same SCSI tape or changer and load the IBM lin_tape device driver. Unload sg kernel module. Attach non-zfcp SCSI devices such as iSCSI or virtio-scsi-ccw. Attach non-zfcp SCSI devices such as iSCSI or virtio-scsi-ccw. man lstape Attach SCSI tape or changer with virtio-scsi-ccw to a KVM guest and run "lstape --verbose". Upstream-ID: - Problem-ID: 170633 Signed-off-by: Steffen Maier <[email protected]> --- zconf/lsluns | 14 +++++++++----- zconf/lsluns.8 | 5 ++--- 2 files changed, 11 insertions(+), 8 deletions(-) --- a/zconf/lsluns +++ b/zconf/lsluns @@ -2,7 +2,7 @@ # # lsluns - list LUNs discovered in the FC SAN, or show encryption state of attached LUNs # -# Copyright IBM Corp. 2008, 2017 +# Copyright IBM Corp. 2008, 2018 # # s390-tools is free software; you can redistribute it and/or modify # it under the terms of the MIT license. See LICENSE for details. @@ -152,6 +152,11 @@ sub get_lun_hash my %lun_hash; foreach my $device (</$sg_dir/sg*>) { + # skip non-zfcp SCSI devices and avoid file access error messages + next unless -r "$device/device/fcp_lun"; + next unless -r "$device/device/wwpn"; + next unless -r "$device/device/hba_id"; + my $l = `cat $device/device/fcp_lun`; my $p = `cat $device/device/wwpn`; my $a = `cat $device/device/hba_id`; @@ -170,9 +175,8 @@ sub get_lun_hash sub lsluns_usage { print <<EOD; Usage: -This tool is designed for environments where all SCSI devices are attached -through the zfcp device driver. Expect error messages in mixed environments -such as with iSCSI. +This tool is designed for environments with SCSI devices attached +through the zfcp device driver. $PROGRAM_NAME [-c <busid>] ... [-p <wwpn>] ... [-h] [-v] @@ -220,7 +224,7 @@ EOD sub lsluns_version { print "$PROGRAM_NAME: version %S390_TOOLS_VERSION%\n"; - print "Copyright IBM Corp. 2008, 2017\n"; + print "Copyright IBM Corp. 2008, 2018\n"; } sub lsluns_invalid_usage { --- a/zconf/lsluns.8 +++ b/zconf/lsluns.8 @@ -28,9 +28,8 @@ zfcp-attached LUNs .SH DESCRIPTION .PP -This tool is designed for environments where all SCSI devices are attached -through the zfcp device driver. Expect error messages in mixed environments -such as with iSCSI. +This tool is designed for environments with SCSI devices attached +through the zfcp device driver. .B lsluns lists all logical unit numbers (LUNs) discovered in the ++++++ s390-tools-sles15-5-lstape-fix-to-prevent-error-messages-if-there-are-no.patch ++++++ Subject: lstape, lsluns: handle non-zfcp; lin_tape multiple paths From: Steffen Maier <[email protected]> Description: lstape, lsluns: handle non-zfcp; lin_tape multiple paths Symptom: lstape shows unexpected additional Device suffix numbers in excess output columns for each additional path of the same tape/changer driven by the IBM lin_tape device driver (independent of actual path failover enablement in lin_tape). It also shows a wrong number of found devices in the header (without --scsi-only). lstape prints error about "Unexpected extra argument:" and the usage for "sg_inq" along with wrong tabular output. lsluns prints ENOENT error text for "cat" on SCSI device sysfs attributes hba_id, wwpn, and fcp_lun. lstape with --verbose option prints ENOENT error text for "cat" on SCSI device sysfs attributes hba_id and wwpn. lstape man page: Description of --type and <devbusid> filter for channel tapes is incomplete. SCSI output description is incomplete. lstape shows "N/A" instead of the HBA device bus-ID with virtio-scsi-ccw. Problem: s390-tools-1.8.0 before the first upstream commit b627b8d8e1ab ("Initial s390-tools-2.0.0 import") introduced SCSI tape/changer output for lstape. It used the SCSI device serial number as lookup key to find a match in IBM lin_tape device driver proc-fs output for a given SCSI device name. Multiple paths to the same tape/changer have the same serial number. Multiple matches cause excess arguments to printf. Explaining the resulting output, the bash man page says: "The format is reused as necessary to consume all of the arguments." This also causes a wrong number of found devices. The default bash settings have nullglob disabled so if $SCSI_DEV/scsi_generic* aka /sys/bus/scsi/devices/*:*:*:*/scsi_generic* does not match anything, it leaves the glob pattern unmodified and SG_DEV=$(basename $SG_DEV/*) results in the literal "*". If $SG_INQ exists, it invoked sg_inq with more than the one allowed positional argument for a SCSI generic device node "sg_inq /dev/*". Causing error messages and the usage of sg_inq to land in $TAPE_SERIAL. lsluns iterates SCSI generic devices and unconditionally reads zfcp-specific SCSI device sysfs attributes hba_id, wwpn, and fcp_lun. lstape --verbose unconditionally reads zfcp-specific SCSI device sysfs attributes hba_id and wwpn. <devbusid> filter missing from synopsis. <device-type> example at wrong place with <devbusid> filter. <devbusid> filter option description is a duplicate of <device-type> filter option description. SCSI output description misses fields. Lstape only used the zfcp-specific sysfs attribute hba_id. Solution: Prefer sysfs to find lin_tape device name for SCSI device. Fallback: The lin_tape proc-fs output format has changed over the years. The HBA device driver string can contain whitespace (e.g. "Virtio SCSI HBA") and breaks the field numbers with tokenized parsing. Grep for the SCSI device name as word (to skip names with same substring, such as 0:0:1:1 also matching 0:0:1:10) and cut the first field 'Number' (lin_tape device name suffix). If there is no SCSI column at all [lin_tape before v2.2.0] (and no SCSI LLDD or other column with a name accidentally matching an existing SCSI device name), we get no match and better bail out with the initialized "N/A" for the lstape column "Device". To not have to rely on the nullglob setting, explicitly check for the existence of $SCSI_DEV/scsi_generic before evaluating SG_DEV=$(basename $SG_DEV/*). Also handle availability of sg_inq but absence of scsi_generic individually to provide the user with a hint if only sg is missing. Simply skip non-zfcp SCSI devices, such as iSCSI or virtio-scsi-ccw, to not erroneously access absent attributes. Assume "N/A" for HBA and WWPN of non-zfcp SCSI devices, such as iSCSI or virtio-scsi-ccw, to not erroneously access absent zfcp-specific sysfs attributes. Add <devbusid> filter to synopsis. Move <device-type> example to <device-type> option. Replace <devbusid> filter option description. Move existing SCSI output description to a new subsection and add description of missing fields. Also search sysfs for an ancestor with subsystem ccw. Reproduction: Attach more than one path to the same SCSI tape or changer and load the IBM lin_tape device driver. Unload sg kernel module. Attach non-zfcp SCSI devices such as iSCSI or virtio-scsi-ccw. Attach non-zfcp SCSI devices such as iSCSI or virtio-scsi-ccw. man lstape Attach SCSI tape or changer with virtio-scsi-ccw to a KVM guest and run "lstape --verbose". Upstream-ID: - Problem-ID: 170633 Signed-off-by: Steffen Maier <[email protected]> --- zconf/lstape | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) --- a/zconf/lstape +++ b/zconf/lstape @@ -335,9 +335,13 @@ function SysfsCreateListSCSI() $STATE if $VERBOSE; then + HBA_ID="N/A" + [ -r $SCSI_DEV/hba_id ] && HBA_ID=$(cat $SCSI_DEV/hba_id) + WWPN="N/A" + [ -r $SCSI_DEV/wwpn ] && WWPN=$(cat $SCSI_DEV/wwpn) printf "$SCSIVFORMAT" \ - $(cat $SCSI_DEV/hba_id) \ - $(cat $SCSI_DEV/wwpn) \ + "$HBA_ID" \ + "$WWPN" \ $TAPE_SERIAL fi done ++++++ s390-tools-sles15-6-lstape-fix-description-of-type-and-devbusid-filter-f.patch ++++++ Subject: lstape, lsluns: handle non-zfcp; lin_tape multiple paths From: Steffen Maier <[email protected]> Description: lstape, lsluns: handle non-zfcp; lin_tape multiple paths Symptom: lstape shows unexpected additional Device suffix numbers in excess output columns for each additional path of the same tape/changer driven by the IBM lin_tape device driver (independent of actual path failover enablement in lin_tape). It also shows a wrong number of found devices in the header (without --scsi-only). lstape prints error about "Unexpected extra argument:" and the usage for "sg_inq" along with wrong tabular output. lsluns prints ENOENT error text for "cat" on SCSI device sysfs attributes hba_id, wwpn, and fcp_lun. lstape with --verbose option prints ENOENT error text for "cat" on SCSI device sysfs attributes hba_id and wwpn. lstape man page: Description of --type and <devbusid> filter for channel tapes is incomplete. SCSI output description is incomplete. lstape shows "N/A" instead of the HBA device bus-ID with virtio-scsi-ccw. Problem: s390-tools-1.8.0 before the first upstream commit b627b8d8e1ab ("Initial s390-tools-2.0.0 import") introduced SCSI tape/changer output for lstape. It used the SCSI device serial number as lookup key to find a match in IBM lin_tape device driver proc-fs output for a given SCSI device name. Multiple paths to the same tape/changer have the same serial number. Multiple matches cause excess arguments to printf. Explaining the resulting output, the bash man page says: "The format is reused as necessary to consume all of the arguments." This also causes a wrong number of found devices. The default bash settings have nullglob disabled so if $SCSI_DEV/scsi_generic* aka /sys/bus/scsi/devices/*:*:*:*/scsi_generic* does not match anything, it leaves the glob pattern unmodified and SG_DEV=$(basename $SG_DEV/*) results in the literal "*". If $SG_INQ exists, it invoked sg_inq with more than the one allowed positional argument for a SCSI generic device node "sg_inq /dev/*". Causing error messages and the usage of sg_inq to land in $TAPE_SERIAL. lsluns iterates SCSI generic devices and unconditionally reads zfcp-specific SCSI device sysfs attributes hba_id, wwpn, and fcp_lun. lstape --verbose unconditionally reads zfcp-specific SCSI device sysfs attributes hba_id and wwpn. <devbusid> filter missing from synopsis. <device-type> example at wrong place with <devbusid> filter. <devbusid> filter option description is a duplicate of <device-type> filter option description. SCSI output description misses fields. Lstape only used the zfcp-specific sysfs attribute hba_id. Solution: Prefer sysfs to find lin_tape device name for SCSI device. Fallback: The lin_tape proc-fs output format has changed over the years. The HBA device driver string can contain whitespace (e.g. "Virtio SCSI HBA") and breaks the field numbers with tokenized parsing. Grep for the SCSI device name as word (to skip names with same substring, such as 0:0:1:1 also matching 0:0:1:10) and cut the first field 'Number' (lin_tape device name suffix). If there is no SCSI column at all [lin_tape before v2.2.0] (and no SCSI LLDD or other column with a name accidentally matching an existing SCSI device name), we get no match and better bail out with the initialized "N/A" for the lstape column "Device". To not have to rely on the nullglob setting, explicitly check for the existence of $SCSI_DEV/scsi_generic before evaluating SG_DEV=$(basename $SG_DEV/*). Also handle availability of sg_inq but absence of scsi_generic individually to provide the user with a hint if only sg is missing. Simply skip non-zfcp SCSI devices, such as iSCSI or virtio-scsi-ccw, to not erroneously access absent attributes. Assume "N/A" for HBA and WWPN of non-zfcp SCSI devices, such as iSCSI or virtio-scsi-ccw, to not erroneously access absent zfcp-specific sysfs attributes. Add <devbusid> filter to synopsis. Move <device-type> example to <device-type> option. Replace <devbusid> filter option description. Move existing SCSI output description to a new subsection and add description of missing fields. Also search sysfs for an ancestor with subsystem ccw. Reproduction: Attach more than one path to the same SCSI tape or changer and load the IBM lin_tape device driver. Unload sg kernel module. Attach non-zfcp SCSI devices such as iSCSI or virtio-scsi-ccw. Attach non-zfcp SCSI devices such as iSCSI or virtio-scsi-ccw. man lstape Attach SCSI tape or changer with virtio-scsi-ccw to a KVM guest and run "lstape --verbose". Upstream-ID: - Problem-ID: 170633 Signed-off-by: Steffen Maier <[email protected]> --- zconf/lstape.8 | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) --- a/zconf/lstape.8 +++ b/zconf/lstape.8 @@ -20,6 +20,8 @@ lstape \- list tape devices. .br .RB [ -t .IR <device-type> [, <device-type> ] "" ...] +.br +.RI [ <device-bus-ID> ...] .SH DESCRIPTION The lstape command lists all available tape devices on the current host. For @@ -78,12 +80,14 @@ on the output of SCSI devices. .TP .BR -t | --type " \fI<device-type>\fR" -Limit output to given device types (currently only applies to channel attached +Limit output to given device types, for example 3490 +(currently only applies to channel-attached tape devices). .TP -\fB<device-type>\fR = -Device type of devices that should be displayed (e.g. 3490). +.I <device-bus-ID> +Limits the output to information about the specified tape device or +devices only. For CCW-attached devices only. .SH EXAMPLES \fBlstape\fR ++++++ s390-tools-sles15-7-lstape-fix-SCSI-output-description-in-man-page.patch ++++++ Subject: lstape, lsluns: handle non-zfcp; lin_tape multiple paths From: Steffen Maier <[email protected]> Description: lstape, lsluns: handle non-zfcp; lin_tape multiple paths Symptom: lstape shows unexpected additional Device suffix numbers in excess output columns for each additional path of the same tape/changer driven by the IBM lin_tape device driver (independent of actual path failover enablement in lin_tape). It also shows a wrong number of found devices in the header (without --scsi-only). lstape prints error about "Unexpected extra argument:" and the usage for "sg_inq" along with wrong tabular output. lsluns prints ENOENT error text for "cat" on SCSI device sysfs attributes hba_id, wwpn, and fcp_lun. lstape with --verbose option prints ENOENT error text for "cat" on SCSI device sysfs attributes hba_id and wwpn. lstape man page: Description of --type and <devbusid> filter for channel tapes is incomplete. SCSI output description is incomplete. lstape shows "N/A" instead of the HBA device bus-ID with virtio-scsi-ccw. Problem: s390-tools-1.8.0 before the first upstream commit b627b8d8e1ab ("Initial s390-tools-2.0.0 import") introduced SCSI tape/changer output for lstape. It used the SCSI device serial number as lookup key to find a match in IBM lin_tape device driver proc-fs output for a given SCSI device name. Multiple paths to the same tape/changer have the same serial number. Multiple matches cause excess arguments to printf. Explaining the resulting output, the bash man page says: "The format is reused as necessary to consume all of the arguments." This also causes a wrong number of found devices. The default bash settings have nullglob disabled so if $SCSI_DEV/scsi_generic* aka /sys/bus/scsi/devices/*:*:*:*/scsi_generic* does not match anything, it leaves the glob pattern unmodified and SG_DEV=$(basename $SG_DEV/*) results in the literal "*". If $SG_INQ exists, it invoked sg_inq with more than the one allowed positional argument for a SCSI generic device node "sg_inq /dev/*". Causing error messages and the usage of sg_inq to land in $TAPE_SERIAL. lsluns iterates SCSI generic devices and unconditionally reads zfcp-specific SCSI device sysfs attributes hba_id, wwpn, and fcp_lun. lstape --verbose unconditionally reads zfcp-specific SCSI device sysfs attributes hba_id and wwpn. <devbusid> filter missing from synopsis. <device-type> example at wrong place with <devbusid> filter. <devbusid> filter option description is a duplicate of <device-type> filter option description. SCSI output description misses fields. Lstape only used the zfcp-specific sysfs attribute hba_id. Solution: Prefer sysfs to find lin_tape device name for SCSI device. Fallback: The lin_tape proc-fs output format has changed over the years. The HBA device driver string can contain whitespace (e.g. "Virtio SCSI HBA") and breaks the field numbers with tokenized parsing. Grep for the SCSI device name as word (to skip names with same substring, such as 0:0:1:1 also matching 0:0:1:10) and cut the first field 'Number' (lin_tape device name suffix). If there is no SCSI column at all [lin_tape before v2.2.0] (and no SCSI LLDD or other column with a name accidentally matching an existing SCSI device name), we get no match and better bail out with the initialized "N/A" for the lstape column "Device". To not have to rely on the nullglob setting, explicitly check for the existence of $SCSI_DEV/scsi_generic before evaluating SG_DEV=$(basename $SG_DEV/*). Also handle availability of sg_inq but absence of scsi_generic individually to provide the user with a hint if only sg is missing. Simply skip non-zfcp SCSI devices, such as iSCSI or virtio-scsi-ccw, to not erroneously access absent attributes. Assume "N/A" for HBA and WWPN of non-zfcp SCSI devices, such as iSCSI or virtio-scsi-ccw, to not erroneously access absent zfcp-specific sysfs attributes. Add <devbusid> filter to synopsis. Move <device-type> example to <device-type> option. Replace <devbusid> filter option description. Move existing SCSI output description to a new subsection and add description of missing fields. Also search sysfs for an ancestor with subsystem ccw. Reproduction: Attach more than one path to the same SCSI tape or changer and load the IBM lin_tape device driver. Unload sg kernel module. Attach non-zfcp SCSI devices such as iSCSI or virtio-scsi-ccw. Attach non-zfcp SCSI devices such as iSCSI or virtio-scsi-ccw. man lstape Attach SCSI tape or changer with virtio-scsi-ccw to a KVM guest and run "lstape --verbose". Upstream-ID: - Problem-ID: 170633 Signed-off-by: Steffen Maier <[email protected]> --- zconf/lstape.8 | 68 +++++++++++++++++++++++++++++++++++++++++++++------------ 1 file changed, 54 insertions(+), 14 deletions(-) --- a/zconf/lstape.8 +++ b/zconf/lstape.8 @@ -29,20 +29,6 @@ channel attached tape devices this outpu /proc/tapedevices (which is obsolete) but also includes offline devices. By default all tape devices are displayed. -Since SCSI tape devices are accessed differently to channel attached tape -devices they are only visible if they are known to the SCSI layer. There -are at least two possible drivers that can claim a SCSI tape device and the -lstape command tries to find out which one this is. For the generic tape -and changer driver the device names start with "st" or "sch", while for the -IBM tape driver this would be "IBMtape" or "IBMchanger". If "N/A" is shown, -the correct driver could not be obtained. - -The serial number of a SCSI tape can be displayed with the --verbose option. If -there is no sg_inq command available "NO/INQ" is shown as the serial number -of the tape. -If no SCSI generic (sg) kernel support is available, "NO/SG" is shown -as the serial number of the tape and "N/A" for the "Generic" column. - The lstape command without the --ccw-only option causes extra SAN traffic for each SCSI tape or changer device by invoking the sg_inq command. @@ -89,6 +75,55 @@ tape devices). Limits the output to information about the specified tape device or devices only. For CCW-attached devices only. +.SH OUTPUT FIELDS FOR SCSI TAPE/CHANGER DEVICES +.TP +.B Generic +SCSI generic device file for the tape drive, for example /dev/sg0. +"N/A" if the SCSI generic (sg) kernel functionality is not available. +.TP +.B Device +Main character device node file for accessing the tape drive or medium changer. +SCSI tape devices are only visible if they are known to the SCSI layer. There +are at least two possible drivers that can claim a SCSI tape device. The +lstape command tries to determine the device driver. For the generic tape +and changer driver the device names start with "st" or "sch", while for the +IBM tape driver this would be "IBMtape" or "IBMchanger". If "N/A" is shown, +the device driver could not be determined. +.TP +.B Target +Linux SCSI device name in H:C:T:L format. +.TP +.B Vendor +The vendor field from the SCSI device. +.TP +.B Model +The model field from the SCSI device. +.TP +.B Type +"tapedrv" for a tape drive or "changer" for a medium changer. +.TP +.B State +The state of the SCSI device object in the kernel. +Any state other than "running" can indicate problems. + +.PP + +For SCSI devices, the --verbose option additionally displays: +.TP +.B HBA +The device bus-ID of the FCP device +through which the tape drive is attached. +"N/A" if device is not attached through zfcp. +.TP +.B WWPN +The WWPN (worldwide port name) of the tape drive in the SAN. +"N/A" if device is not attached through zfcp. +.TP +.B Serial +The serial number. +"NO/INQ" if there is no sg_inq command available. +"NO/SG" if no SCSI generic (sg) kernel support is available. + .SH EXAMPLES \fBlstape\fR .RS @@ -99,3 +134,8 @@ List all tape devices that are available .RS Show all 3490 CCW devices that are online. .RE + +\fBlstape --scsi-only --verbose\fR +.RS +Show all SCSI tape or changer devices with maximum information. +.RE ++++++ s390-tools-sles15-8-lstape-fix-SCSI-HBA-CCW-device-bus-ID-e.g.-for-virti.patch ++++++ Subject: lstape, lsluns: handle non-zfcp; lin_tape multiple paths From: Steffen Maier <[email protected]> Description: lstape, lsluns: handle non-zfcp; lin_tape multiple paths Symptom: lstape shows unexpected additional Device suffix numbers in excess output columns for each additional path of the same tape/changer driven by the IBM lin_tape device driver (independent of actual path failover enablement in lin_tape). It also shows a wrong number of found devices in the header (without --scsi-only). lstape prints error about "Unexpected extra argument:" and the usage for "sg_inq" along with wrong tabular output. lsluns prints ENOENT error text for "cat" on SCSI device sysfs attributes hba_id, wwpn, and fcp_lun. lstape with --verbose option prints ENOENT error text for "cat" on SCSI device sysfs attributes hba_id and wwpn. lstape man page: Description of --type and <devbusid> filter for channel tapes is incomplete. SCSI output description is incomplete. lstape shows "N/A" instead of the HBA device bus-ID with virtio-scsi-ccw. Problem: s390-tools-1.8.0 before the first upstream commit b627b8d8e1ab ("Initial s390-tools-2.0.0 import") introduced SCSI tape/changer output for lstape. It used the SCSI device serial number as lookup key to find a match in IBM lin_tape device driver proc-fs output for a given SCSI device name. Multiple paths to the same tape/changer have the same serial number. Multiple matches cause excess arguments to printf. Explaining the resulting output, the bash man page says: "The format is reused as necessary to consume all of the arguments." This also causes a wrong number of found devices. The default bash settings have nullglob disabled so if $SCSI_DEV/scsi_generic* aka /sys/bus/scsi/devices/*:*:*:*/scsi_generic* does not match anything, it leaves the glob pattern unmodified and SG_DEV=$(basename $SG_DEV/*) results in the literal "*". If $SG_INQ exists, it invoked sg_inq with more than the one allowed positional argument for a SCSI generic device node "sg_inq /dev/*". Causing error messages and the usage of sg_inq to land in $TAPE_SERIAL. lsluns iterates SCSI generic devices and unconditionally reads zfcp-specific SCSI device sysfs attributes hba_id, wwpn, and fcp_lun. lstape --verbose unconditionally reads zfcp-specific SCSI device sysfs attributes hba_id and wwpn. <devbusid> filter missing from synopsis. <device-type> example at wrong place with <devbusid> filter. <devbusid> filter option description is a duplicate of <device-type> filter option description. SCSI output description misses fields. Lstape only used the zfcp-specific sysfs attribute hba_id. Solution: Prefer sysfs to find lin_tape device name for SCSI device. Fallback: The lin_tape proc-fs output format has changed over the years. The HBA device driver string can contain whitespace (e.g. "Virtio SCSI HBA") and breaks the field numbers with tokenized parsing. Grep for the SCSI device name as word (to skip names with same substring, such as 0:0:1:1 also matching 0:0:1:10) and cut the first field 'Number' (lin_tape device name suffix). If there is no SCSI column at all [lin_tape before v2.2.0] (and no SCSI LLDD or other column with a name accidentally matching an existing SCSI device name), we get no match and better bail out with the initialized "N/A" for the lstape column "Device". To not have to rely on the nullglob setting, explicitly check for the existence of $SCSI_DEV/scsi_generic before evaluating SG_DEV=$(basename $SG_DEV/*). Also handle availability of sg_inq but absence of scsi_generic individually to provide the user with a hint if only sg is missing. Simply skip non-zfcp SCSI devices, such as iSCSI or virtio-scsi-ccw, to not erroneously access absent attributes. Assume "N/A" for HBA and WWPN of non-zfcp SCSI devices, such as iSCSI or virtio-scsi-ccw, to not erroneously access absent zfcp-specific sysfs attributes. Add <devbusid> filter to synopsis. Move <device-type> example to <device-type> option. Replace <devbusid> filter option description. Move existing SCSI output description to a new subsection and add description of missing fields. Also search sysfs for an ancestor with subsystem ccw. Reproduction: Attach more than one path to the same SCSI tape or changer and load the IBM lin_tape device driver. Unload sg kernel module. Attach non-zfcp SCSI devices such as iSCSI or virtio-scsi-ccw. Attach non-zfcp SCSI devices such as iSCSI or virtio-scsi-ccw. man lstape Attach SCSI tape or changer with virtio-scsi-ccw to a KVM guest and run "lstape --verbose". Upstream-ID: - Problem-ID: 170633 Signed-off-by: Steffen Maier <[email protected]> --- zconf/lstape | 25 +++++++++++++++++++++++-- zconf/lstape.8 | 3 ++- 2 files changed, 25 insertions(+), 3 deletions(-) --- a/zconf/lstape +++ b/zconf/lstape @@ -223,6 +223,24 @@ function SysfsCreateListCCW() { ' | sort } +# handle SCSI device not necessarily zfcp-attached, e.g. virtio-scsi-ccw +function SCSISearchCCWBusid() +{ + local SCSI_DEV=$1 + local SDEVCAN=$(readlink -e $SCSI_DEV) + while [ -n "$SDEVCAN" ]; do + # ascend to parent: strip last path part + SDEVCAN=${SDEVCAN%/*} + [ -h $SDEVCAN/subsystem ] || continue + local SUBSYSTEM=$(readlink -e $SDEVCAN/subsystem) + if [ "${SUBSYSTEM##*/}" = "ccw" ]; then + echo ${SDEVCAN##*/} + return + fi + done + echo "N/A" +} + function SysfsCreateListSCSI() { for SCSI_DEV in $1/bus/scsi/devices/*:*:*:*; do @@ -335,8 +353,11 @@ function SysfsCreateListSCSI() $STATE if $VERBOSE; then - HBA_ID="N/A" - [ -r $SCSI_DEV/hba_id ] && HBA_ID=$(cat $SCSI_DEV/hba_id) + if [ -r $SCSI_DEV/hba_id ]; then + HBA_ID=$(cat $SCSI_DEV/hba_id) + else + HBA_ID=$(SCSISearchCCWBusid $SCSI_DEV) + fi WWPN="N/A" [ -r $SCSI_DEV/wwpn ] && WWPN=$(cat $SCSI_DEV/wwpn) printf "$SCSIVFORMAT" \ --- a/zconf/lstape.8 +++ b/zconf/lstape.8 @@ -112,8 +112,9 @@ For SCSI devices, the --verbose option a .TP .B HBA The device bus-ID of the FCP device +or of the virtio-scsi-ccw virtual HBA through which the tape drive is attached. -"N/A" if device is not attached through zfcp. +"N/A" if the device does not have a sysfs ancestor with subsystem ccw. .TP .B WWPN The WWPN (worldwide port name) of the tape drive in the SAN. ++++++ s390-tools-sles15-dbginfo-add-data-for-ps-cpprot.patch ++++++ Subject: [PATCH] [BZ 168517] dbginfo.sh: Extend data collection From: Sa Liu <[email protected]> Description: dbginfo.sh: Extend data collection Symptom: This update covers various symptoms on dbginfo.sh data collection: - There is no data collected for docker. - ps command does not show threads infomation. - There is no run queue statistics and scheduler data. - z/VM commands do not show multithread, protect settings and SSI status. Problem: Following problems exist: - No analysis is possible for docker data. - Missing thread information. - Missing run queue statistics and scheduler data. - Missing z/VM information. Solution: - Extend the data collection to collect docker data - Change ps command to show threads informaton - Add commands to display run queue statistics and scheduler data. - Add z/VM commands to show multithread, protect settings and SSI status. Reproduction: Run this script and verify the output Upstream-ID: - Problem-ID: 168517 Signed-off-by: Sa Liu <[email protected]> --- scripts/dbginfo.sh | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) --- a/scripts/dbginfo.sh +++ b/scripts/dbginfo.sh @@ -375,7 +375,8 @@ CMDS="uname -a\ :runlevel\ :iptables -L\ :ulimit -a\ - :ps -eo pid,tid,nlwp,policy,user,tname,ni,pri,psr,sgi_p,stat,wchan,start_time,time,pcpu,pmem,vsize,size,rss,share,command\ + :ps -emo pid,tid,nlwp,policy,user,tname,ni,pri,psr,sgi_p,stat,wchan,start_time,time,pcpu,pmem,vsize,size,rss,share,command\ + :ps -eHo pid,tid,nlwp,policy,user,tname,ni,pri,psr,sgi_p,stat,wchan,start_time,time,pcpu,pmem,vsize,size,rss,share,command\ :ps axX\ :dmesg -s 1048576\ :last\ @@ -470,6 +471,8 @@ VM_CMDS="q userid\ :q privclass\ :q cplevel\ :q cpservice\ + :q cpprot user\ + :q specex\ :q ssi\ :q cpus\ :q srm\ @@ -508,6 +511,7 @@ VM_CMDS="q userid\ :q cache\ :q nic\ :q pav\ + :q proc\ :q proc topology\ :q mt\ :q qioass\ @@ -831,7 +835,7 @@ post_processing() { local tmp_file local file_name - pr_syslog_stdout "11 of ${COLLECTION_COUNT}: Postprocessing" + pr_syslog_stdout "${COLLECTION_COUNT} of ${COLLECTION_COUNT}: Postprocessing" find "${WORKPATH}etc/libvirt/qemu/" -maxdepth 1 -name "*.xml" 2>/dev/null | while IFS= read -r file_name; do file_mtime_epoche=$(stat --format=%Y "${file_name}") ++++++ s390-tools-sles15-mon_procd-fix-parsing-of-proc-pid-stat.patch ++++++ Subject: mon_procd: fix parsing of /proc/<pid>/stat From: Gerald Schaefer <[email protected]> Description: mon_procd: fix parsing of /proc/<pid>/stat Symptom: Wrong data from /proc/<pid>/stat for processes that contain a ")" in their name. Problem: The output of /proc/<pid>/stat will show the process name in parentheses. The parsing code in read_stat() tries to filter out the parentheses, which will go wrong when the process name itself also contains parentheses, e.g. in an output like this: "2421 ((sd-pam)) S 2420 2420 2420 ..." In this case, the first closing parentheses will be taken as end marker, and the sscanf() on the remaining string will silently fail, leaving its values in uninitialized state and producing wrong data. Solution: Use strrchr() instead of strchr() to find the last closing parentheses. Also add return value checking for sscanf() and initialize the values to 0. Reproduction: Use mon_procd on a system with running processes that have a ")" in their name, like "(sd-pam)". Upstream-ID: - Problem-ID: 169483 Signed-off-by: Gerald Schaefer <[email protected]> --- mon_tools/mon_procd.c | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) --- a/mon_tools/mon_procd.c +++ b/mon_tools/mon_procd.c @@ -594,17 +594,18 @@ static void cal_task_pcpu(struct task_t */ static int read_stat(struct task_t *task) { - int ppid, tty, proc; - unsigned long flags, pri, nice; - unsigned long long maj_flt, utime, stime, cutime, cstime; + unsigned long long maj_flt = 0, utime = 0, stime = 0, cutime = 0, + cstime = 0; + unsigned long flags = 0, pri = 0, nice = 0; char *cmd_start, *cmd_end, *cmdlenp, *cmdp; + int ppid = 0, tty = 0, proc = 0, rc; snprintf(fname, sizeof(fname), "/proc/%u/stat", task->pid); if (read_file(fname, buf, sizeof(buf) - 1) == -1) return 0; cmd_start = strchr(buf, '(') + 1; - cmd_end = strchr(cmd_start, ')'); + cmd_end = strrchr(cmd_start, ')'); name_lens.cmd_len = cmd_end - cmd_start; cmdlenp = mon_record + sizeof(struct monwrite_hdr); cmdlenp += sizeof(struct procd_hdr); @@ -625,7 +626,7 @@ static int read_stat(struct task_t *task memcpy(cmdlenp, &name_lens.cmd_len, sizeof(__u16)); cmd_end += 2; - sscanf(cmd_end, + rc = sscanf(cmd_end, "%c %d %*d %*d %d %*d " "%lu %*s %*s %Lu %*s " "%Lu %Lu %Lu %Lu " @@ -642,6 +643,8 @@ static int read_stat(struct task_t *task &utime, &stime, &cutime, &cstime, &pri, &nice, &proc); + if (rc != 12) + syslog(LOG_ERR, "bad data in %s \n", fname); task->ppid = (__u32)ppid; task->tty = (__u16)tty; task->flags = (__u32)flags;
