|
@@ -3,7 +3,7 @@
|
|
|
*
|
|
|
* Implementation of FSF commands.
|
|
|
*
|
|
|
- * Copyright IBM Corp. 2002, 2010
|
|
|
+ * Copyright IBM Corp. 2002, 2013
|
|
|
*/
|
|
|
|
|
|
#define KMSG_COMPONENT "zfcp"
|
|
@@ -478,12 +478,8 @@ static int zfcp_fsf_exchange_config_evaluate(struct zfcp_fsf_req *req)
|
|
|
|
|
|
fc_host_port_name(shost) = nsp->fl_wwpn;
|
|
|
fc_host_node_name(shost) = nsp->fl_wwnn;
|
|
|
- fc_host_port_id(shost) = ntoh24(bottom->s_id);
|
|
|
- fc_host_speed(shost) =
|
|
|
- zfcp_fsf_convert_portspeed(bottom->fc_link_speed);
|
|
|
fc_host_supported_classes(shost) = FC_COS_CLASS2 | FC_COS_CLASS3;
|
|
|
|
|
|
- adapter->hydra_version = bottom->adapter_type;
|
|
|
adapter->timer_ticks = bottom->timer_interval & ZFCP_FSF_TIMER_INT_MASK;
|
|
|
adapter->stat_read_buf_num = max(bottom->status_read_buf_num,
|
|
|
(u16)FSF_STATUS_READS_RECOM);
|
|
@@ -491,6 +487,19 @@ static int zfcp_fsf_exchange_config_evaluate(struct zfcp_fsf_req *req)
|
|
|
if (fc_host_permanent_port_name(shost) == -1)
|
|
|
fc_host_permanent_port_name(shost) = fc_host_port_name(shost);
|
|
|
|
|
|
+ zfcp_scsi_set_prot(adapter);
|
|
|
+
|
|
|
+ /* no error return above here, otherwise must fix call chains */
|
|
|
+ /* do not evaluate invalid fields */
|
|
|
+ if (req->qtcb->header.fsf_status == FSF_EXCHANGE_CONFIG_DATA_INCOMPLETE)
|
|
|
+ return 0;
|
|
|
+
|
|
|
+ fc_host_port_id(shost) = ntoh24(bottom->s_id);
|
|
|
+ fc_host_speed(shost) =
|
|
|
+ zfcp_fsf_convert_portspeed(bottom->fc_link_speed);
|
|
|
+
|
|
|
+ adapter->hydra_version = bottom->adapter_type;
|
|
|
+
|
|
|
switch (bottom->fc_topology) {
|
|
|
case FSF_TOPO_P2P:
|
|
|
adapter->peer_d_id = ntoh24(bottom->peer_d_id);
|
|
@@ -512,8 +521,6 @@ static int zfcp_fsf_exchange_config_evaluate(struct zfcp_fsf_req *req)
|
|
|
return -EIO;
|
|
|
}
|
|
|
|
|
|
- zfcp_scsi_set_prot(adapter);
|
|
|
-
|
|
|
return 0;
|
|
|
}
|
|
|
|
|
@@ -564,6 +571,8 @@ static void zfcp_fsf_exchange_config_data_handler(struct zfcp_fsf_req *req)
|
|
|
&adapter->status);
|
|
|
zfcp_fsf_link_down_info_eval(req,
|
|
|
&qtcb->header.fsf_status_qual.link_down_info);
|
|
|
+ if (zfcp_fsf_exchange_config_evaluate(req))
|
|
|
+ return;
|
|
|
break;
|
|
|
default:
|
|
|
zfcp_erp_adapter_shutdown(adapter, 0, "fsecdh3");
|