Subject: [PATCH] [BZ 161888] lsluns: do not print confusing messages when a filter matches nothing
From: Jens Remus <jremus@linux.vnet.ibm.com>

Description:  lsluns: Fix filter handling and documentation enhancements.
Symptom:      lsluns lists all LUNs discovered in the FC SAN despite user
              given filter(s) that do not match anything:
                # lsluns -c 0.0.5080
                    No valid combination found for adapter '0.0.5080'. Removing
                    from resource list.
                No valid parameters left, using all available resources in
                system.
                Scanning for LUNs on adapter 0.0.5090
                ...

              lsluns prints the message "No valid combination found for
              {adapter|port} '...'. Removing from resource list." for every
              adapter and port filter that does not contribute to the final
              filtered results.

              The formatting of the lsluns (8) man page is flawed.

              lsluns is used in unexpected or even unsupported ways.
Problem:      Scanning can be resource consumptive. So if a user already wants
              to filter, possibly to reduce resource consumption, he does not
              want to happen to scan everything and thus consume the worst case
              of resources.

              The message "No valid combination found for {adapter|port} '...'.
              Removing from resource list." is potentially confusing. It is
              unclear which combination is being referred to, especially if
              only one single adapter or port filter was specified. There is
              also no differentiation whether the denoted adapter or port
              exists for its own or not. It just does not exist in the final
              filtered results.

              The formatting of the lsluns (8) man page is flawed.

              The lsluns usage text and lsluns (8) man page lack the
              information on the intended use cases, requirements, and
              restrictions.
Solution:     Print a message and exit when all filters match nothing.

              Do not print confusing messages when a filter matches nothing.

              Fix man page formatting.

              Enhance usage text and man page. Clarify discovery use case,
              relation to NPIV and to zfcp auto LUN scan. Point out
              IBM Storwize configuration requirements. Document restriction to
              zfcp-only systems.
Reproduction: Use lsluns and specify adapter bus-ID and/or target port WWPN
              filter(s) that do not match anything. Either specify inexistent
              bus-IDs and/or WWPNs or invalid filter arguments.
Upstream-ID:  c993ad89c544dd162005a9a1e582b51667c46b66
Problem-ID:   161888

Upstream-Description:

              lsluns: do not print confusing messages when a filter matches nothing

              lsluns printed potentially confusing messages when a filter or combination
              of filters matched nothing:

                  No valid combination found for adapter '0.0.1906'. Removing from
                  resource list.
                  No valid combination found for port '0x50050763071845e3'. Removing from
                  resource list.
              ...

              To the user it is potentially unclear which 'combination' is actually being
              referred to, as only one part of the combination is mentioned, and what the
              ominous 'resource list' is. The later information is merely useful for a
              developer to debug the script.

              Such a message was written for every user supplied filter that did not
              contribute anything to the resulting subset that is being listed, although
              the filter actually might match something when used standalone.

              Additionally those messages were printed to stdout instead of stderr. As
              there is no debug or verbose switch and the information level of those
              messages is low, we may simply discard them.

              Reported-by: Steffen Maier <maier@linux.vnet.ibm.com>
              Signed-off-by: Jens Remus <jremus@linux.vnet.ibm.com>
              Reviewed-by: Steffen Maier <maier@linux.vnet.ibm.com>
              Reviewed-by: Benjamin Block <bblock@linux.vnet.ibm.com>
              Signed-off-by: Michael Holzheu <holzheu@linux.vnet.ibm.com>


Signed-off-by: Jens Remus <jremus@linux.vnet.ibm.com>
---
 zconf/lsluns |   15 ---------------
 1 file changed, 15 deletions(-)

--- a/zconf/lsluns
+++ b/zconf/lsluns
@@ -212,7 +212,6 @@ sub get_env_list
     my $p_ref_list = shift();
     my @res ;
     my %res_hash;
-    my @t_arr;
 
     @res = </sys/bus/ccw/drivers/zfcp/*.*.*/0x*>;
     return () if (!@res);
@@ -223,20 +222,6 @@ sub get_env_list
         next if (@$p_ref_list && "@$p_ref_list" !~ /$p/);
         push @{ $res_hash{$a} }, $p;
     }
-    foreach my $a (sort @$a_ref_list) {
-        if ("@{[keys %res_hash]}" !~ /$a/) {
-            print "\tNo valid combination found for adapter '$a'. ",
-            "Removing from resource list.\n";
-        }
-    }
-
-    push @t_arr, map { @{$res_hash{$_}} } keys %res_hash;
-    foreach my $p (@$p_ref_list) {
-        if ("@t_arr" !~ /$p/) {
-            print "\tNo valid combination found for port '$p'. ",
-            "Removing from resource list.\n";
-        }
-    }
 
     if (!%res_hash) {
         print "$PROGRAM_NAME: Adapter and/or port filter(s) did not match anything\n";
