diff mbox

[01/10] zfcp: fix fc_host port_type with NPIV

Message ID 1470846653-90691-2-git-send-email-maier@linux.vnet.ibm.com (mailing list archive)
State Accepted, archived
Headers show

Commit Message

Steffen Maier Aug. 10, 2016, 4:30 p.m. UTC
For an NPIV-enabled FCP device, zfcp can erroneously show
"NPort (fabric via point-to-point)" instead of "NPIV VPORT"
for the port_type sysfs attribute of the corresponding
fc_host.
s390-tools that can be affected are dbginfo.sh and ziomon.

zfcp_fsf_exchange_config_evaluate() ignores
fsf_qtcb_bottom_config.connection_features indicating NPIV
and only sets fc_host_port_type to FC_PORTTYPE_NPORT if
fsf_qtcb_bottom_config.fc_topology is FSF_TOPO_FABRIC.

Only the independent zfcp_fsf_exchange_port_evaluate()
evaluates connection_features to overwrite fc_host_port_type
to FC_PORTTYPE_NPIV in case of NPIV.
Code was introduced with upstream kernel 2.6.30
commit 0282985da5923fa6365adcc1a1586ae0c13c1617
("[SCSI] zfcp: Report fc_host_port_type as NPIV").

This works during FCP device recovery (such as set online)
because it performs FSF_QTCB_EXCHANGE_CONFIG_DATA followed by
FSF_QTCB_EXCHANGE_PORT_DATA in sequence.

However, the zfcp-specific scsi host sysfs attributes
"requests", "megabytes", or "seconds_active" trigger only
zfcp_fsf_exchange_config_evaluate() resetting fc_host
port_type to FC_PORTTYPE_NPORT despite NPIV.

The zfcp-specific scsi host sysfs attribute "utilization"
triggers only zfcp_fsf_exchange_port_evaluate() correcting
the fc_host port_type again in case of NPIV.

Evaluate fsf_qtcb_bottom_config.connection_features
in zfcp_fsf_exchange_config_evaluate() where it belongs to.

Signed-off-by: Steffen Maier <maier@linux.vnet.ibm.com>
Fixes: 0282985da592 ("[SCSI] zfcp: Report fc_host_port_type as NPIV")
Cc: <stable@vger.kernel.org> #2.6.30+
Reviewed-by: Benjamin Block <bblock@linux.vnet.ibm.com>
---
 drivers/s390/scsi/zfcp_fsf.c | 8 +++++---
 1 file changed, 5 insertions(+), 3 deletions(-)

Comments

Hannes Reinecke Aug. 11, 2016, 11:19 a.m. UTC | #1
On 08/10/2016 06:30 PM, Steffen Maier wrote:
> For an NPIV-enabled FCP device, zfcp can erroneously show
> "NPort (fabric via point-to-point)" instead of "NPIV VPORT"
> for the port_type sysfs attribute of the corresponding
> fc_host.
> s390-tools that can be affected are dbginfo.sh and ziomon.
> 
> zfcp_fsf_exchange_config_evaluate() ignores
> fsf_qtcb_bottom_config.connection_features indicating NPIV
> and only sets fc_host_port_type to FC_PORTTYPE_NPORT if
> fsf_qtcb_bottom_config.fc_topology is FSF_TOPO_FABRIC.
> 
> Only the independent zfcp_fsf_exchange_port_evaluate()
> evaluates connection_features to overwrite fc_host_port_type
> to FC_PORTTYPE_NPIV in case of NPIV.
> Code was introduced with upstream kernel 2.6.30
> commit 0282985da5923fa6365adcc1a1586ae0c13c1617
> ("[SCSI] zfcp: Report fc_host_port_type as NPIV").
> 
> This works during FCP device recovery (such as set online)
> because it performs FSF_QTCB_EXCHANGE_CONFIG_DATA followed by
> FSF_QTCB_EXCHANGE_PORT_DATA in sequence.
> 
> However, the zfcp-specific scsi host sysfs attributes
> "requests", "megabytes", or "seconds_active" trigger only
> zfcp_fsf_exchange_config_evaluate() resetting fc_host
> port_type to FC_PORTTYPE_NPORT despite NPIV.
> 
> The zfcp-specific scsi host sysfs attribute "utilization"
> triggers only zfcp_fsf_exchange_port_evaluate() correcting
> the fc_host port_type again in case of NPIV.
> 
> Evaluate fsf_qtcb_bottom_config.connection_features
> in zfcp_fsf_exchange_config_evaluate() where it belongs to.
> 
> Signed-off-by: Steffen Maier <maier@linux.vnet.ibm.com>
> Fixes: 0282985da592 ("[SCSI] zfcp: Report fc_host_port_type as NPIV")
> Cc: <stable@vger.kernel.org> #2.6.30+
> Reviewed-by: Benjamin Block <bblock@linux.vnet.ibm.com>
> ---
Reviewed-by: Hannes Reinecke <hare@suse.com>

Cheers,

Hannes
diff mbox

Patch

diff --git a/drivers/s390/scsi/zfcp_fsf.c b/drivers/s390/scsi/zfcp_fsf.c
index 522a633c866a..84353f45cfe6 100644
--- a/drivers/s390/scsi/zfcp_fsf.c
+++ b/drivers/s390/scsi/zfcp_fsf.c
@@ -3,7 +3,7 @@ 
  *
  * Implementation of FSF commands.
  *
- * Copyright IBM Corp. 2002, 2013
+ * Copyright IBM Corp. 2002, 2015
  */
 
 #define KMSG_COMPONENT "zfcp"
@@ -508,7 +508,10 @@  static int zfcp_fsf_exchange_config_evaluate(struct zfcp_fsf_req *req)
 		fc_host_port_type(shost) = FC_PORTTYPE_PTP;
 		break;
 	case FSF_TOPO_FABRIC:
-		fc_host_port_type(shost) = FC_PORTTYPE_NPORT;
+		if (bottom->connection_features & FSF_FEATURE_NPIV_MODE)
+			fc_host_port_type(shost) = FC_PORTTYPE_NPIV;
+		else
+			fc_host_port_type(shost) = FC_PORTTYPE_NPORT;
 		break;
 	case FSF_TOPO_AL:
 		fc_host_port_type(shost) = FC_PORTTYPE_NLPORT;
@@ -613,7 +616,6 @@  static void zfcp_fsf_exchange_port_evaluate(struct zfcp_fsf_req *req)
 
 	if (adapter->connection_features & FSF_FEATURE_NPIV_MODE) {
 		fc_host_permanent_port_name(shost) = bottom->wwpn;
-		fc_host_port_type(shost) = FC_PORTTYPE_NPIV;
 	} else
 		fc_host_permanent_port_name(shost) = fc_host_port_name(shost);
 	fc_host_maxframe_size(shost) = bottom->maximum_frame_size;