Loading drivers/s390/scsi/zfcp_aux.c +21 −0 Original line number Diff line number Diff line Loading @@ -1748,4 +1748,25 @@ zfcp_handle_els_rjt(u32 sq, struct zfcp_ls_rjt_par *rjt_par) return ret; } /** * zfcp_plogi_evaluate - evaluate PLOGI playload and copy important fields * into zfcp_port structure * @port: zfcp_port structure * @plogi: plogi payload */ void zfcp_plogi_evaluate(struct zfcp_port *port, struct fsf_plogi *plogi) { port->maxframe_size = plogi->serv_param.common_serv_param[7] | ((plogi->serv_param.common_serv_param[6] & 0x0F) << 8); if (plogi->serv_param.class1_serv_param[0] & 0x80) port->supported_classes |= FC_COS_CLASS1; if (plogi->serv_param.class2_serv_param[0] & 0x80) port->supported_classes |= FC_COS_CLASS2; if (plogi->serv_param.class3_serv_param[0] & 0x80) port->supported_classes |= FC_COS_CLASS3; if (plogi->serv_param.class4_serv_param[0] & 0x80) port->supported_classes |= FC_COS_CLASS4; } #undef ZFCP_LOG_AREA drivers/s390/scsi/zfcp_def.h +2 −0 Original line number Diff line number Diff line Loading @@ -959,6 +959,8 @@ struct zfcp_port { u32 handle; /* handle assigned by FSF */ struct zfcp_erp_action erp_action; /* pending error recovery */ atomic_t erp_counter; u32 maxframe_size; u32 supported_classes; }; /* the struct device sysfs_device must be at the beginning of this structure. Loading drivers/s390/scsi/zfcp_erp.c +5 −1 Original line number Diff line number Diff line Loading @@ -3257,8 +3257,12 @@ zfcp_erp_action_cleanup(int action, struct zfcp_adapter *adapter, "(adapter %s, wwpn=0x%016Lx)\n", zfcp_get_busid_by_port(port), port->wwpn); else else { scsi_flush_work(adapter->scsi_host); port->rport->maxframe_size = port->maxframe_size; port->rport->supported_classes = port->supported_classes; } } zfcp_port_put(port); break; Loading drivers/s390/scsi/zfcp_ext.h +1 −0 Original line number Diff line number Diff line Loading @@ -115,6 +115,7 @@ extern int zfcp_nameserver_enqueue(struct zfcp_adapter *); extern int zfcp_ns_gid_pn_request(struct zfcp_erp_action *); extern int zfcp_check_ct_response(struct ct_hdr *); extern int zfcp_handle_els_rjt(u32, struct zfcp_ls_rjt_par *); extern void zfcp_plogi_evaluate(struct zfcp_port *, struct fsf_plogi *); /******************************* SCSI ****************************************/ extern int zfcp_adapter_scsi_register(struct zfcp_adapter *); Loading drivers/s390/scsi/zfcp_fsf.c +4 −3 Original line number Diff line number Diff line Loading @@ -2560,8 +2560,7 @@ zfcp_fsf_open_port_handler(struct zfcp_fsf_req *fsf_req) if (!atomic_test_mask(ZFCP_STATUS_PORT_NO_WWPN, &port->status)) { if (fsf_req->qtcb->bottom.support.els1_length < ((((unsigned long) &plogi->serv_param.wwpn) - ((unsigned long) plogi)) + sizeof (u64))) { sizeof (struct fsf_plogi)) { ZFCP_LOG_INFO( "warning: insufficient length of " "PLOGI payload (%i)\n", Loading @@ -2580,8 +2579,10 @@ zfcp_fsf_open_port_handler(struct zfcp_fsf_req *fsf_req) atomic_clear_mask( ZFCP_STATUS_PORT_DID_DID, &port->status); } else } else { port->wwnn = plogi->serv_param.wwnn; zfcp_plogi_evaluate(port, plogi); } } } break; Loading Loading
drivers/s390/scsi/zfcp_aux.c +21 −0 Original line number Diff line number Diff line Loading @@ -1748,4 +1748,25 @@ zfcp_handle_els_rjt(u32 sq, struct zfcp_ls_rjt_par *rjt_par) return ret; } /** * zfcp_plogi_evaluate - evaluate PLOGI playload and copy important fields * into zfcp_port structure * @port: zfcp_port structure * @plogi: plogi payload */ void zfcp_plogi_evaluate(struct zfcp_port *port, struct fsf_plogi *plogi) { port->maxframe_size = plogi->serv_param.common_serv_param[7] | ((plogi->serv_param.common_serv_param[6] & 0x0F) << 8); if (plogi->serv_param.class1_serv_param[0] & 0x80) port->supported_classes |= FC_COS_CLASS1; if (plogi->serv_param.class2_serv_param[0] & 0x80) port->supported_classes |= FC_COS_CLASS2; if (plogi->serv_param.class3_serv_param[0] & 0x80) port->supported_classes |= FC_COS_CLASS3; if (plogi->serv_param.class4_serv_param[0] & 0x80) port->supported_classes |= FC_COS_CLASS4; } #undef ZFCP_LOG_AREA
drivers/s390/scsi/zfcp_def.h +2 −0 Original line number Diff line number Diff line Loading @@ -959,6 +959,8 @@ struct zfcp_port { u32 handle; /* handle assigned by FSF */ struct zfcp_erp_action erp_action; /* pending error recovery */ atomic_t erp_counter; u32 maxframe_size; u32 supported_classes; }; /* the struct device sysfs_device must be at the beginning of this structure. Loading
drivers/s390/scsi/zfcp_erp.c +5 −1 Original line number Diff line number Diff line Loading @@ -3257,8 +3257,12 @@ zfcp_erp_action_cleanup(int action, struct zfcp_adapter *adapter, "(adapter %s, wwpn=0x%016Lx)\n", zfcp_get_busid_by_port(port), port->wwpn); else else { scsi_flush_work(adapter->scsi_host); port->rport->maxframe_size = port->maxframe_size; port->rport->supported_classes = port->supported_classes; } } zfcp_port_put(port); break; Loading
drivers/s390/scsi/zfcp_ext.h +1 −0 Original line number Diff line number Diff line Loading @@ -115,6 +115,7 @@ extern int zfcp_nameserver_enqueue(struct zfcp_adapter *); extern int zfcp_ns_gid_pn_request(struct zfcp_erp_action *); extern int zfcp_check_ct_response(struct ct_hdr *); extern int zfcp_handle_els_rjt(u32, struct zfcp_ls_rjt_par *); extern void zfcp_plogi_evaluate(struct zfcp_port *, struct fsf_plogi *); /******************************* SCSI ****************************************/ extern int zfcp_adapter_scsi_register(struct zfcp_adapter *); Loading
drivers/s390/scsi/zfcp_fsf.c +4 −3 Original line number Diff line number Diff line Loading @@ -2560,8 +2560,7 @@ zfcp_fsf_open_port_handler(struct zfcp_fsf_req *fsf_req) if (!atomic_test_mask(ZFCP_STATUS_PORT_NO_WWPN, &port->status)) { if (fsf_req->qtcb->bottom.support.els1_length < ((((unsigned long) &plogi->serv_param.wwpn) - ((unsigned long) plogi)) + sizeof (u64))) { sizeof (struct fsf_plogi)) { ZFCP_LOG_INFO( "warning: insufficient length of " "PLOGI payload (%i)\n", Loading @@ -2580,8 +2579,10 @@ zfcp_fsf_open_port_handler(struct zfcp_fsf_req *fsf_req) atomic_clear_mask( ZFCP_STATUS_PORT_DID_DID, &port->status); } else } else { port->wwnn = plogi->serv_param.wwnn; zfcp_plogi_evaluate(port, plogi); } } } break; Loading