s390utils/0060-lsluns-Fix-LUN-reporting-for-SAN-volume-controller-S.patch
2011-03-25 14:59:32 +01:00

70 lines
2.8 KiB
Diff

From bdc3b89850bb437f48cb2f9fa31a8f51d3cd88b5 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Dan=20Hor=C3=A1k?= <dan@danny.cz>
Date: Fri, 28 Jan 2011 14:30:22 +0100
Subject: [PATCH 60/61] lsluns: Fix LUN reporting for SAN volume controller (SVC)
Description: lsluns: Fix LUN reporting for SAN volume controller (SVC)
Symptom: lsluns fails to report LUNs from SVC
Problem: The SCSI Architecture Model (SAM) specifies that a storage
server only has to support the REPORT LUNs command for LUN 0
or the "REPORT LUNS Well-Known-LUN" (WLUN). The SAN Volume
Controller (SVC) only supports REPORT LUNS on LUN 0. The
approach of lsluns of sending the REPORT LUNS to any attached
LUN does not work for the SVC.
Solution: Change the strategy of lsluns to check if the LUN 0 or the
WLUN is already available. If both LUNs are not available,
first try to attach LUN 0 and issue the command; if this
fails, try the WLUN.
---
zconf/lsluns | 14 +++++++++-----
1 files changed, 9 insertions(+), 5 deletions(-)
diff --git a/zconf/lsluns b/zconf/lsluns
index 769b846..acbdcd7 100755
--- a/zconf/lsluns
+++ b/zconf/lsluns
@@ -45,16 +45,16 @@ sub list_luns
next;
}
if (!defined($lun_hash{$a}{$p})) {
- `echo $wlun >> $drv_dir/$a/$p/unit_add 2>/dev/null`;
+ `echo $lun0 >> $drv_dir/$a/$p/unit_add 2>/dev/null`;
select(undef, undef, undef, 0.1);
%lun_hash = get_lun_hash();
if (!defined($lun_hash{$a}{$p})) {
- `echo $wlun >> $drv_dir/$a/$p/unit_remove 2>/dev/null`;
- `echo $lun0 >> $drv_dir/$a/$p/unit_add 2>/dev/null`;
+ `echo $lun0 >> $drv_dir/$a/$p/unit_remove 2>/dev/null`;
+ `echo $wlun >> $drv_dir/$a/$p/unit_add 2>/dev/null`;
select(undef, undef, undef, 0.1);
%lun_hash = get_lun_hash();
if (!defined($lun_hash{$a}{$p})) {
- `echo $lun0 >> $drv_dir/$a/$p/unit_remove 2>/dev/null`;
+ `echo $wlun >> $drv_dir/$a/$p/unit_remove 2>/dev/null`;
print"\tat port $p:\n";
print "\t\tCannot attach WLUN / LUN0 for scanning.\n";
next;
@@ -92,6 +92,8 @@ sub list_luns
}
}
+# Look only for LUN0 and the REPORT LUNs WLUN. SAM specifies that the storage
+# only has to response on one of those to the REPORT LUNs command.
sub get_lun_hash
{
my %lun_hash;
@@ -105,7 +107,9 @@ sub get_lun_hash
$p =~ s/(0x\w{16})*\n/$1/;
chomp($a);
- $lun_hash{$a}{$p}{$l} = ${[split('/', $device)]}[-1];
+ if ($l eq $lun0 or $l eq $wlun) {
+ $lun_hash{$a}{$p}{$l} = ${[split('/', $device)]}[-1];
+ }
}
return %lun_hash;
}
--
1.7.3.5