forked from pool/s390-tools
cd557016ed
- 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 - 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) - dasd_reload: Check for 41-dasd-<type>-<ccw>.rules in addition to the original 51-dasd-<ccw>.rules (bsc#1103407) - Removed s390 from the ExclusiveArch parameter (bsc#1102906) OBS-URL: https://build.opensuse.org/package/show/Base:System/s390-tools?expand=0&rev=54
182 lines
7.6 KiB
Diff
182 lines
7.6 KiB
Diff
Subject: lstape, lsluns: handle non-zfcp; lin_tape multiple paths
|
|
From: Steffen Maier <maier@linux.ibm.com>
|
|
|
|
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 <maier@linux.ibm.com>
|
|
---
|
|
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.
|