|
@@ -2107,6 +2107,9 @@ zfcp_fsf_exchange_config_evaluate(struct zfcp_fsf_req *fsf_req, int xchg_ok)
|
|
|
bottom->low_qtcb_version, bottom->high_qtcb_version);
|
|
|
adapter->fsf_lic_version = bottom->lic_version;
|
|
|
adapter->supported_features = bottom->supported_features;
|
|
|
+ adapter->peer_wwpn = 0;
|
|
|
+ adapter->peer_wwnn = 0;
|
|
|
+ adapter->peer_d_id = 0;
|
|
|
|
|
|
if (xchg_ok) {
|
|
|
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)
|
|
|
adapter->hydra_version = 0;
|
|
|
}
|
|
|
|
|
|
+ if (adapter->fc_topology == FSF_TOPO_P2P) {
|
|
|
+ adapter->peer_d_id = bottom->peer_d_id & ZFCP_DID_MASK;
|
|
|
+ adapter->peer_wwpn = bottom->plogi_payload.wwpn;
|
|
|
+ adapter->peer_wwnn = bottom->plogi_payload.wwnn;
|
|
|
+ }
|
|
|
+
|
|
|
if(adapter->supported_features & FSF_FEATURE_HBAAPI_MANAGEMENT){
|
|
|
adapter->hardware_version = bottom->hardware_version;
|
|
|
memcpy(adapter->serial_number, bottom->serial_number, 17);
|
|
|
EBCASC(adapter->serial_number, sizeof(adapter->serial_number));
|
|
|
}
|
|
|
|
|
|
- ZFCP_LOG_INFO("The adapter %s reported the following characteristics:\n"
|
|
|
+ ZFCP_LOG_NORMAL("The adapter %s reported the following characteristics:\n"
|
|
|
"WWNN 0x%016Lx, "
|
|
|
"WWPN 0x%016Lx, "
|
|
|
"S_ID 0x%08x,\n"
|
|
@@ -2194,14 +2203,18 @@ zfcp_fsf_exchange_config_data_handler(struct zfcp_fsf_req *fsf_req)
|
|
|
switch (adapter->fc_topology) {
|
|
|
case FSF_TOPO_P2P:
|
|
|
ZFCP_LOG_FLAGS(1, "FSF_TOPO_P2P\n");
|
|
|
- ZFCP_LOG_NORMAL("error: Point-to-point fibrechannel "
|
|
|
- "configuration detected at adapter %s "
|
|
|
- "unsupported, shutting down adapter\n",
|
|
|
- zfcp_get_busid_by_adapter(adapter));
|
|
|
+ ZFCP_LOG_NORMAL("Point-to-Point fibrechannel "
|
|
|
+ "configuration detected at adapter %s\n"
|
|
|
+ "Peer WWNN 0x%016llx, "
|
|
|
+ "peer WWPN 0x%016llx, "
|
|
|
+ "peer d_id 0x%06x\n",
|
|
|
+ zfcp_get_busid_by_adapter(adapter),
|
|
|
+ adapter->peer_wwnn,
|
|
|
+ adapter->peer_wwpn,
|
|
|
+ adapter->peer_d_id);
|
|
|
debug_text_event(fsf_req->adapter->erp_dbf, 0,
|
|
|
"top-p-to-p");
|
|
|
- zfcp_erp_adapter_shutdown(adapter, 0);
|
|
|
- return -EIO;
|
|
|
+ break;
|
|
|
case FSF_TOPO_AL:
|
|
|
ZFCP_LOG_FLAGS(1, "FSF_TOPO_AL\n");
|
|
|
ZFCP_LOG_NORMAL("error: Arbitrated loop fibrechannel "
|
|
@@ -2226,6 +2239,7 @@ zfcp_fsf_exchange_config_data_handler(struct zfcp_fsf_req *fsf_req)
|
|
|
"of a type known to the zfcp "
|
|
|
"driver, shutting down adapter\n",
|
|
|
zfcp_get_busid_by_adapter(adapter));
|
|
|
+ adapter->fc_topology = FSF_TOPO_ERROR;
|
|
|
debug_text_exception(fsf_req->adapter->erp_dbf, 0,
|
|
|
"unknown-topo");
|
|
|
zfcp_erp_adapter_shutdown(adapter, 0);
|
|
@@ -4281,6 +4295,7 @@ zfcp_fsf_send_fcp_command_task_handler(struct zfcp_fsf_req *fsf_req)
|
|
|
bottom.io.fcp_cmnd, FSF_FCP_CMND_SIZE);
|
|
|
zfcp_cmd_dbf_event_fsf("undeffcp", fsf_req, NULL, 0);
|
|
|
set_host_byte(&scpnt->result, DID_ERROR);
|
|
|
+ goto skip_fsfstatus;
|
|
|
}
|
|
|
}
|
|
|
|
|
@@ -4334,7 +4349,7 @@ zfcp_fsf_send_fcp_command_task_handler(struct zfcp_fsf_req *fsf_req)
|
|
|
|
|
|
scpnt->resid = fcp_rsp_iu->fcp_resid;
|
|
|
if (scpnt->request_bufflen - scpnt->resid < scpnt->underflow)
|
|
|
- scpnt->result |= DID_ERROR << 16;
|
|
|
+ set_host_byte(&scpnt->result, DID_ERROR);
|
|
|
}
|
|
|
|
|
|
skip_fsfstatus:
|
|
@@ -4607,6 +4622,13 @@ zfcp_fsf_control_file_handler(struct zfcp_fsf_req *fsf_req)
|
|
|
if (bottom->operation_subtype == FSF_CFDC_OPERATION_SUBTYPE) {
|
|
|
switch (header->fsf_status_qual.word[0]) {
|
|
|
|
|
|
+ case FSF_SQ_CFDC_HARDENED_ON_SE:
|
|
|
+ ZFCP_LOG_NORMAL(
|
|
|
+ "CFDC on the adapter %s has being "
|
|
|
+ "hardened on primary and secondary SE\n",
|
|
|
+ zfcp_get_busid_by_adapter(adapter));
|
|
|
+ break;
|
|
|
+
|
|
|
case FSF_SQ_CFDC_COULD_NOT_HARDEN_ON_SE:
|
|
|
ZFCP_LOG_NORMAL(
|
|
|
"CFDC of the adapter %s could not "
|