aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/s390/scsi/zfcp_fsf.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/s390/scsi/zfcp_fsf.c')
-rw-r--r--drivers/s390/scsi/zfcp_fsf.c38
1 files changed, 30 insertions, 8 deletions
diff --git a/drivers/s390/scsi/zfcp_fsf.c b/drivers/s390/scsi/zfcp_fsf.c
index 578b9fbe5206..148b11c822bf 100644
--- a/drivers/s390/scsi/zfcp_fsf.c
+++ b/drivers/s390/scsi/zfcp_fsf.c
@@ -2107,6 +2107,9 @@ zfcp_fsf_exchange_config_evaluate(struct zfcp_fsf_req *fsf_req, int xchg_ok)
2107 bottom->low_qtcb_version, bottom->high_qtcb_version); 2107 bottom->low_qtcb_version, bottom->high_qtcb_version);
2108 adapter->fsf_lic_version = bottom->lic_version; 2108 adapter->fsf_lic_version = bottom->lic_version;
2109 adapter->supported_features = bottom->supported_features; 2109 adapter->supported_features = bottom->supported_features;
2110 adapter->peer_wwpn = 0;
2111 adapter->peer_wwnn = 0;
2112 adapter->peer_d_id = 0;
2110 2113
2111 if (xchg_ok) { 2114 if (xchg_ok) {
2112 adapter->wwnn = bottom->nport_serv_param.wwnn; 2115 adapter->wwnn = bottom->nport_serv_param.wwnn;
@@ -2124,13 +2127,19 @@ zfcp_fsf_exchange_config_evaluate(struct zfcp_fsf_req *fsf_req, int xchg_ok)
2124 adapter->hydra_version = 0; 2127 adapter->hydra_version = 0;
2125 } 2128 }
2126 2129
2130 if (adapter->fc_topology == FSF_TOPO_P2P) {
2131 adapter->peer_d_id = bottom->peer_d_id & ZFCP_DID_MASK;
2132 adapter->peer_wwpn = bottom->plogi_payload.wwpn;
2133 adapter->peer_wwnn = bottom->plogi_payload.wwnn;
2134 }
2135
2127 if(adapter->supported_features & FSF_FEATURE_HBAAPI_MANAGEMENT){ 2136 if(adapter->supported_features & FSF_FEATURE_HBAAPI_MANAGEMENT){
2128 adapter->hardware_version = bottom->hardware_version; 2137 adapter->hardware_version = bottom->hardware_version;
2129 memcpy(adapter->serial_number, bottom->serial_number, 17); 2138 memcpy(adapter->serial_number, bottom->serial_number, 17);
2130 EBCASC(adapter->serial_number, sizeof(adapter->serial_number)); 2139 EBCASC(adapter->serial_number, sizeof(adapter->serial_number));
2131 } 2140 }
2132 2141
2133 ZFCP_LOG_INFO("The adapter %s reported the following characteristics:\n" 2142 ZFCP_LOG_NORMAL("The adapter %s reported the following characteristics:\n"
2134 "WWNN 0x%016Lx, " 2143 "WWNN 0x%016Lx, "
2135 "WWPN 0x%016Lx, " 2144 "WWPN 0x%016Lx, "
2136 "S_ID 0x%08x,\n" 2145 "S_ID 0x%08x,\n"
@@ -2194,14 +2203,18 @@ zfcp_fsf_exchange_config_data_handler(struct zfcp_fsf_req *fsf_req)
2194 switch (adapter->fc_topology) { 2203 switch (adapter->fc_topology) {
2195 case FSF_TOPO_P2P: 2204 case FSF_TOPO_P2P:
2196 ZFCP_LOG_FLAGS(1, "FSF_TOPO_P2P\n"); 2205 ZFCP_LOG_FLAGS(1, "FSF_TOPO_P2P\n");
2197 ZFCP_LOG_NORMAL("error: Point-to-point fibrechannel " 2206 ZFCP_LOG_NORMAL("Point-to-Point fibrechannel "
2198 "configuration detected at adapter %s " 2207 "configuration detected at adapter %s\n"
2199 "unsupported, shutting down adapter\n", 2208 "Peer WWNN 0x%016llx, "
2200 zfcp_get_busid_by_adapter(adapter)); 2209 "peer WWPN 0x%016llx, "
2210 "peer d_id 0x%06x\n",
2211 zfcp_get_busid_by_adapter(adapter),
2212 adapter->peer_wwnn,
2213 adapter->peer_wwpn,
2214 adapter->peer_d_id);
2201 debug_text_event(fsf_req->adapter->erp_dbf, 0, 2215 debug_text_event(fsf_req->adapter->erp_dbf, 0,
2202 "top-p-to-p"); 2216 "top-p-to-p");
2203 zfcp_erp_adapter_shutdown(adapter, 0); 2217 break;
2204 return -EIO;
2205 case FSF_TOPO_AL: 2218 case FSF_TOPO_AL:
2206 ZFCP_LOG_FLAGS(1, "FSF_TOPO_AL\n"); 2219 ZFCP_LOG_FLAGS(1, "FSF_TOPO_AL\n");
2207 ZFCP_LOG_NORMAL("error: Arbitrated loop fibrechannel " 2220 ZFCP_LOG_NORMAL("error: Arbitrated loop fibrechannel "
@@ -2226,6 +2239,7 @@ zfcp_fsf_exchange_config_data_handler(struct zfcp_fsf_req *fsf_req)
2226 "of a type known to the zfcp " 2239 "of a type known to the zfcp "
2227 "driver, shutting down adapter\n", 2240 "driver, shutting down adapter\n",
2228 zfcp_get_busid_by_adapter(adapter)); 2241 zfcp_get_busid_by_adapter(adapter));
2242 adapter->fc_topology = FSF_TOPO_ERROR;
2229 debug_text_exception(fsf_req->adapter->erp_dbf, 0, 2243 debug_text_exception(fsf_req->adapter->erp_dbf, 0,
2230 "unknown-topo"); 2244 "unknown-topo");
2231 zfcp_erp_adapter_shutdown(adapter, 0); 2245 zfcp_erp_adapter_shutdown(adapter, 0);
@@ -4281,6 +4295,7 @@ zfcp_fsf_send_fcp_command_task_handler(struct zfcp_fsf_req *fsf_req)
4281 bottom.io.fcp_cmnd, FSF_FCP_CMND_SIZE); 4295 bottom.io.fcp_cmnd, FSF_FCP_CMND_SIZE);
4282 zfcp_cmd_dbf_event_fsf("undeffcp", fsf_req, NULL, 0); 4296 zfcp_cmd_dbf_event_fsf("undeffcp", fsf_req, NULL, 0);
4283 set_host_byte(&scpnt->result, DID_ERROR); 4297 set_host_byte(&scpnt->result, DID_ERROR);
4298 goto skip_fsfstatus;
4284 } 4299 }
4285 } 4300 }
4286 4301
@@ -4334,7 +4349,7 @@ zfcp_fsf_send_fcp_command_task_handler(struct zfcp_fsf_req *fsf_req)
4334 4349
4335 scpnt->resid = fcp_rsp_iu->fcp_resid; 4350 scpnt->resid = fcp_rsp_iu->fcp_resid;
4336 if (scpnt->request_bufflen - scpnt->resid < scpnt->underflow) 4351 if (scpnt->request_bufflen - scpnt->resid < scpnt->underflow)
4337 scpnt->result |= DID_ERROR << 16; 4352 set_host_byte(&scpnt->result, DID_ERROR);
4338 } 4353 }
4339 4354
4340 skip_fsfstatus: 4355 skip_fsfstatus:
@@ -4607,6 +4622,13 @@ zfcp_fsf_control_file_handler(struct zfcp_fsf_req *fsf_req)
4607 if (bottom->operation_subtype == FSF_CFDC_OPERATION_SUBTYPE) { 4622 if (bottom->operation_subtype == FSF_CFDC_OPERATION_SUBTYPE) {
4608 switch (header->fsf_status_qual.word[0]) { 4623 switch (header->fsf_status_qual.word[0]) {
4609 4624
4625 case FSF_SQ_CFDC_HARDENED_ON_SE:
4626 ZFCP_LOG_NORMAL(
4627 "CFDC on the adapter %s has being "
4628 "hardened on primary and secondary SE\n",
4629 zfcp_get_busid_by_adapter(adapter));
4630 break;
4631
4610 case FSF_SQ_CFDC_COULD_NOT_HARDEN_ON_SE: 4632 case FSF_SQ_CFDC_COULD_NOT_HARDEN_ON_SE:
4611 ZFCP_LOG_NORMAL( 4633 ZFCP_LOG_NORMAL(
4612 "CFDC of the adapter %s could not " 4634 "CFDC of the adapter %s could not "