diff options
-rw-r--r-- | drivers/s390/scsi/zfcp_aux.c | 15 | ||||
-rw-r--r-- | drivers/s390/scsi/zfcp_def.h | 47 | ||||
-rw-r--r-- | drivers/s390/scsi/zfcp_erp.c | 2 | ||||
-rw-r--r-- | drivers/s390/scsi/zfcp_fsf.c | 62 | ||||
-rw-r--r-- | drivers/s390/scsi/zfcp_fsf.h | 21 | ||||
-rw-r--r-- | drivers/s390/scsi/zfcp_qdio.c | 3 | ||||
-rw-r--r-- | drivers/s390/scsi/zfcp_scsi.c | 13 |
7 files changed, 41 insertions, 122 deletions
diff --git a/drivers/s390/scsi/zfcp_aux.c b/drivers/s390/scsi/zfcp_aux.c index 4a17ce499808..bdaad5535e22 100644 --- a/drivers/s390/scsi/zfcp_aux.c +++ b/drivers/s390/scsi/zfcp_aux.c | |||
@@ -740,7 +740,7 @@ struct zfcp_unit * | |||
740 | zfcp_unit_enqueue(struct zfcp_port *port, fcp_lun_t fcp_lun) | 740 | zfcp_unit_enqueue(struct zfcp_port *port, fcp_lun_t fcp_lun) |
741 | { | 741 | { |
742 | struct zfcp_unit *unit, *tmp_unit; | 742 | struct zfcp_unit *unit, *tmp_unit; |
743 | scsi_lun_t scsi_lun; | 743 | unsigned int scsi_lun; |
744 | int found; | 744 | int found; |
745 | 745 | ||
746 | /* | 746 | /* |
@@ -991,12 +991,6 @@ zfcp_adapter_enqueue(struct ccw_device *ccw_device) | |||
991 | /* intitialise SCSI ER timer */ | 991 | /* intitialise SCSI ER timer */ |
992 | init_timer(&adapter->scsi_er_timer); | 992 | init_timer(&adapter->scsi_er_timer); |
993 | 993 | ||
994 | /* set FC service class used per default */ | ||
995 | adapter->fc_service_class = ZFCP_FC_SERVICE_CLASS_DEFAULT; | ||
996 | |||
997 | sprintf(adapter->name, "%s", zfcp_get_busid_by_adapter(adapter)); | ||
998 | ASCEBC(adapter->name, strlen(adapter->name)); | ||
999 | |||
1000 | /* mark adapter unusable as long as sysfs registration is not complete */ | 994 | /* mark adapter unusable as long as sysfs registration is not complete */ |
1001 | atomic_set_mask(ZFCP_STATUS_COMMON_REMOVE, &adapter->status); | 995 | atomic_set_mask(ZFCP_STATUS_COMMON_REMOVE, &adapter->status); |
1002 | 996 | ||
@@ -1347,18 +1341,19 @@ static void | |||
1347 | zfcp_fsf_incoming_els_plogi(struct zfcp_adapter *adapter, | 1341 | zfcp_fsf_incoming_els_plogi(struct zfcp_adapter *adapter, |
1348 | struct fsf_status_read_buffer *status_buffer) | 1342 | struct fsf_status_read_buffer *status_buffer) |
1349 | { | 1343 | { |
1350 | logi *els_logi = (logi *) status_buffer->payload; | 1344 | struct fsf_plogi *els_plogi; |
1351 | struct zfcp_port *port; | 1345 | struct zfcp_port *port; |
1352 | unsigned long flags; | 1346 | unsigned long flags; |
1353 | 1347 | ||
1348 | els_plogi = (struct fsf_plogi *) status_buffer->payload; | ||
1354 | read_lock_irqsave(&zfcp_data.config_lock, flags); | 1349 | read_lock_irqsave(&zfcp_data.config_lock, flags); |
1355 | list_for_each_entry(port, &adapter->port_list_head, list) { | 1350 | list_for_each_entry(port, &adapter->port_list_head, list) { |
1356 | if (port->wwpn == (*(wwn_t *) & els_logi->nport_wwn)) | 1351 | if (port->wwpn == (*(wwn_t *) &els_plogi->serv_param.wwpn)) |
1357 | break; | 1352 | break; |
1358 | } | 1353 | } |
1359 | read_unlock_irqrestore(&zfcp_data.config_lock, flags); | 1354 | read_unlock_irqrestore(&zfcp_data.config_lock, flags); |
1360 | 1355 | ||
1361 | if (!port || (port->wwpn != (*(wwn_t *) & els_logi->nport_wwn))) { | 1356 | if (!port || (port->wwpn != (*(wwn_t *) &els_plogi->serv_param.wwpn))) { |
1362 | ZFCP_LOG_DEBUG("ignored incoming PLOGI for nonexisting port " | 1357 | ZFCP_LOG_DEBUG("ignored incoming PLOGI for nonexisting port " |
1363 | "with d_id 0x%08x on adapter %s\n", | 1358 | "with d_id 0x%08x on adapter %s\n", |
1364 | status_buffer->d_id, | 1359 | status_buffer->d_id, |
diff --git a/drivers/s390/scsi/zfcp_def.h b/drivers/s390/scsi/zfcp_def.h index 362af4d95352..e93272f18827 100644 --- a/drivers/s390/scsi/zfcp_def.h +++ b/drivers/s390/scsi/zfcp_def.h | |||
@@ -39,7 +39,6 @@ | |||
39 | #include <scsi/scsi_host.h> | 39 | #include <scsi/scsi_host.h> |
40 | #include <scsi/scsi_transport.h> | 40 | #include <scsi/scsi_transport.h> |
41 | #include <scsi/scsi_transport_fc.h> | 41 | #include <scsi/scsi_transport_fc.h> |
42 | #include "../../fc4/fc.h" | ||
43 | #include "zfcp_fsf.h" | 42 | #include "zfcp_fsf.h" |
44 | #include <asm/ccwdev.h> | 43 | #include <asm/ccwdev.h> |
45 | #include <asm/qdio.h> | 44 | #include <asm/qdio.h> |
@@ -78,13 +77,9 @@ zfcp_address_to_sg(void *address, struct scatterlist *list) | |||
78 | list->offset = ((unsigned long) address) & (PAGE_SIZE - 1); | 77 | list->offset = ((unsigned long) address) & (PAGE_SIZE - 1); |
79 | } | 78 | } |
80 | 79 | ||
81 | /********************* SCSI SPECIFIC DEFINES *********************************/ | 80 | #define REQUEST_LIST_SIZE 128 |
82 | |||
83 | /* 32 bit for SCSI ID and LUN as long as the SCSI stack uses this type */ | ||
84 | typedef u32 scsi_id_t; | ||
85 | typedef u32 scsi_lun_t; | ||
86 | 81 | ||
87 | #define ZFCP_ERP_SCSI_LOW_MEM_TIMEOUT (100*HZ) | 82 | /********************* SCSI SPECIFIC DEFINES *********************************/ |
88 | #define ZFCP_SCSI_ER_TIMEOUT (100*HZ) | 83 | #define ZFCP_SCSI_ER_TIMEOUT (100*HZ) |
89 | 84 | ||
90 | /********************* CIO/QDIO SPECIFIC DEFINES *****************************/ | 85 | /********************* CIO/QDIO SPECIFIC DEFINES *****************************/ |
@@ -222,8 +217,9 @@ struct fcp_rsp_iu { | |||
222 | #define RSP_CODE_TASKMAN_FAILED 5 | 217 | #define RSP_CODE_TASKMAN_FAILED 5 |
223 | 218 | ||
224 | /* see fc-fs */ | 219 | /* see fc-fs */ |
225 | #define LS_FAN 0x60000000 | 220 | #define LS_RSCN 0x61040000 |
226 | #define LS_RSCN 0x61040000 | 221 | #define LS_LOGO 0x05000000 |
222 | #define LS_PLOGI 0x03000000 | ||
227 | 223 | ||
228 | struct fcp_rscn_head { | 224 | struct fcp_rscn_head { |
229 | u8 command; | 225 | u8 command; |
@@ -252,13 +248,6 @@ struct fcp_rscn_element { | |||
252 | #define ZFCP_NO_PORTS_PER_DOMAIN 0x10000 | 248 | #define ZFCP_NO_PORTS_PER_DOMAIN 0x10000 |
253 | #define ZFCP_NO_PORTS_PER_FABRIC 0x1000000 | 249 | #define ZFCP_NO_PORTS_PER_FABRIC 0x1000000 |
254 | 250 | ||
255 | struct fcp_fan { | ||
256 | u32 command; | ||
257 | u32 fport_did; | ||
258 | wwn_t fport_wwpn; | ||
259 | wwn_t fport_wwname; | ||
260 | } __attribute__((packed)); | ||
261 | |||
262 | /* see fc-ph */ | 251 | /* see fc-ph */ |
263 | struct fcp_logo { | 252 | struct fcp_logo { |
264 | u32 command; | 253 | u32 command; |
@@ -496,9 +485,6 @@ struct zfcp_rc_entry { | |||
496 | 485 | ||
497 | #define ZFCP_NAME "zfcp" | 486 | #define ZFCP_NAME "zfcp" |
498 | 487 | ||
499 | /* read-only LUN sharing switch initial value */ | ||
500 | #define ZFCP_RO_LUN_SHARING_DEFAULTS 0 | ||
501 | |||
502 | /* independent log areas */ | 488 | /* independent log areas */ |
503 | #define ZFCP_LOG_AREA_OTHER 0 | 489 | #define ZFCP_LOG_AREA_OTHER 0 |
504 | #define ZFCP_LOG_AREA_SCSI 1 | 490 | #define ZFCP_LOG_AREA_SCSI 1 |
@@ -597,7 +583,6 @@ do { \ | |||
597 | * and unit | 583 | * and unit |
598 | */ | 584 | */ |
599 | #define ZFCP_COMMON_FLAGS 0xfff00000 | 585 | #define ZFCP_COMMON_FLAGS 0xfff00000 |
600 | #define ZFCP_SPECIFIC_FLAGS 0x000fffff | ||
601 | 586 | ||
602 | /* common status bits */ | 587 | /* common status bits */ |
603 | #define ZFCP_STATUS_COMMON_REMOVE 0x80000000 | 588 | #define ZFCP_STATUS_COMMON_REMOVE 0x80000000 |
@@ -622,11 +607,6 @@ do { \ | |||
622 | #define ZFCP_STATUS_ADAPTER_LINK_UNPLUGGED 0x00000200 | 607 | #define ZFCP_STATUS_ADAPTER_LINK_UNPLUGGED 0x00000200 |
623 | #define ZFCP_STATUS_ADAPTER_XPORT_OK 0x00000800 | 608 | #define ZFCP_STATUS_ADAPTER_XPORT_OK 0x00000800 |
624 | 609 | ||
625 | #define ZFCP_STATUS_ADAPTER_SCSI_UP \ | ||
626 | (ZFCP_STATUS_COMMON_UNBLOCKED | \ | ||
627 | ZFCP_STATUS_ADAPTER_REGISTERED) | ||
628 | |||
629 | |||
630 | /* FC-PH/FC-GS well-known address identifiers for generic services */ | 610 | /* FC-PH/FC-GS well-known address identifiers for generic services */ |
631 | #define ZFCP_DID_MANAGEMENT_SERVICE 0xFFFFFA | 611 | #define ZFCP_DID_MANAGEMENT_SERVICE 0xFFFFFA |
632 | #define ZFCP_DID_TIME_SERVICE 0xFFFFFB | 612 | #define ZFCP_DID_TIME_SERVICE 0xFFFFFB |
@@ -641,7 +621,6 @@ do { \ | |||
641 | #define ZFCP_STATUS_PORT_NO_WWPN 0x00000008 | 621 | #define ZFCP_STATUS_PORT_NO_WWPN 0x00000008 |
642 | #define ZFCP_STATUS_PORT_NO_SCSI_ID 0x00000010 | 622 | #define ZFCP_STATUS_PORT_NO_SCSI_ID 0x00000010 |
643 | #define ZFCP_STATUS_PORT_INVALID_WWPN 0x00000020 | 623 | #define ZFCP_STATUS_PORT_INVALID_WWPN 0x00000020 |
644 | #define ZFCP_STATUS_PORT_ACCESS_DENIED 0x00000040 | ||
645 | 624 | ||
646 | /* for ports with well known addresses */ | 625 | /* for ports with well known addresses */ |
647 | #define ZFCP_STATUS_PORT_WKA \ | 626 | #define ZFCP_STATUS_PORT_WKA \ |
@@ -897,15 +876,12 @@ struct zfcp_adapter { | |||
897 | wwn_t peer_wwpn; /* P2P peer WWPN */ | 876 | wwn_t peer_wwpn; /* P2P peer WWPN */ |
898 | u32 peer_d_id; /* P2P peer D_ID */ | 877 | u32 peer_d_id; /* P2P peer D_ID */ |
899 | struct ccw_device *ccw_device; /* S/390 ccw device */ | 878 | struct ccw_device *ccw_device; /* S/390 ccw device */ |
900 | u8 fc_service_class; | ||
901 | u32 hydra_version; /* Hydra version */ | 879 | u32 hydra_version; /* Hydra version */ |
902 | u32 fsf_lic_version; | 880 | u32 fsf_lic_version; |
903 | u32 adapter_features; /* FCP channel features */ | 881 | u32 adapter_features; /* FCP channel features */ |
904 | u32 connection_features; /* host connection features */ | 882 | u32 connection_features; /* host connection features */ |
905 | u32 hardware_version; /* of FCP channel */ | 883 | u32 hardware_version; /* of FCP channel */ |
906 | struct Scsi_Host *scsi_host; /* Pointer to mid-layer */ | 884 | struct Scsi_Host *scsi_host; /* Pointer to mid-layer */ |
907 | unsigned short scsi_host_no; /* Assigned host number */ | ||
908 | unsigned char name[9]; | ||
909 | struct list_head port_list_head; /* remote port list */ | 885 | struct list_head port_list_head; /* remote port list */ |
910 | struct list_head port_remove_lh; /* head of ports to be | 886 | struct list_head port_remove_lh; /* head of ports to be |
911 | removed */ | 887 | removed */ |
@@ -997,7 +973,7 @@ struct zfcp_unit { | |||
997 | refcount drop to zero */ | 973 | refcount drop to zero */ |
998 | struct zfcp_port *port; /* remote port of unit */ | 974 | struct zfcp_port *port; /* remote port of unit */ |
999 | atomic_t status; /* status of this logical unit */ | 975 | atomic_t status; /* status of this logical unit */ |
1000 | scsi_lun_t scsi_lun; /* own SCSI LUN */ | 976 | unsigned int scsi_lun; /* own SCSI LUN */ |
1001 | fcp_lun_t fcp_lun; /* own FCP_LUN */ | 977 | fcp_lun_t fcp_lun; /* own FCP_LUN */ |
1002 | u32 handle; /* handle assigned by FSF */ | 978 | u32 handle; /* handle assigned by FSF */ |
1003 | struct scsi_device *device; /* scsi device struct pointer */ | 979 | struct scsi_device *device; /* scsi device struct pointer */ |
@@ -1041,11 +1017,6 @@ struct zfcp_data { | |||
1041 | struct list_head adapter_list_head; /* head of adapter list */ | 1017 | struct list_head adapter_list_head; /* head of adapter list */ |
1042 | struct list_head adapter_remove_lh; /* head of adapters to be | 1018 | struct list_head adapter_remove_lh; /* head of adapters to be |
1043 | removed */ | 1019 | removed */ |
1044 | rwlock_t status_read_lock; /* for status read thread */ | ||
1045 | struct list_head status_read_receive_head; | ||
1046 | struct list_head status_read_send_head; | ||
1047 | struct semaphore status_read_sema; | ||
1048 | wait_queue_head_t status_read_thread_wqh; | ||
1049 | u32 adapters; /* # of adapters in list */ | 1020 | u32 adapters; /* # of adapters in list */ |
1050 | rwlock_t config_lock; /* serialises changes | 1021 | rwlock_t config_lock; /* serialises changes |
1051 | to adapter/port/unit | 1022 | to adapter/port/unit |
@@ -1084,9 +1055,6 @@ struct zfcp_fsf_req_pool_element { | |||
1084 | 1055 | ||
1085 | /********************** ZFCP SPECIFIC DEFINES ********************************/ | 1056 | /********************** ZFCP SPECIFIC DEFINES ********************************/ |
1086 | 1057 | ||
1087 | #define ZFCP_FSFREQ_CLEANUP_TIMEOUT HZ/10 | ||
1088 | |||
1089 | #define ZFCP_KNOWN 0x00000001 | ||
1090 | #define ZFCP_REQ_AUTO_CLEANUP 0x00000002 | 1058 | #define ZFCP_REQ_AUTO_CLEANUP 0x00000002 |
1091 | #define ZFCP_WAIT_FOR_SBAL 0x00000004 | 1059 | #define ZFCP_WAIT_FOR_SBAL 0x00000004 |
1092 | #define ZFCP_REQ_NO_QTCB 0x00000008 | 1060 | #define ZFCP_REQ_NO_QTCB 0x00000008 |
@@ -1094,9 +1062,6 @@ struct zfcp_fsf_req_pool_element { | |||
1094 | #define ZFCP_SET 0x00000100 | 1062 | #define ZFCP_SET 0x00000100 |
1095 | #define ZFCP_CLEAR 0x00000200 | 1063 | #define ZFCP_CLEAR 0x00000200 |
1096 | 1064 | ||
1097 | #define ZFCP_INTERRUPTIBLE 1 | ||
1098 | #define ZFCP_UNINTERRUPTIBLE 0 | ||
1099 | |||
1100 | #ifndef atomic_test_mask | 1065 | #ifndef atomic_test_mask |
1101 | #define atomic_test_mask(mask, target) \ | 1066 | #define atomic_test_mask(mask, target) \ |
1102 | ((atomic_read(target) & mask) == mask) | 1067 | ((atomic_read(target) & mask) == mask) |
diff --git a/drivers/s390/scsi/zfcp_erp.c b/drivers/s390/scsi/zfcp_erp.c index ea2e7a398892..ce852c0de129 100644 --- a/drivers/s390/scsi/zfcp_erp.c +++ b/drivers/s390/scsi/zfcp_erp.c | |||
@@ -3407,7 +3407,7 @@ zfcp_erp_adapter_access_changed(struct zfcp_adapter *adapter) | |||
3407 | return; | 3407 | return; |
3408 | 3408 | ||
3409 | debug_text_event(adapter->erp_dbf, 3, "a_access_recover"); | 3409 | debug_text_event(adapter->erp_dbf, 3, "a_access_recover"); |
3410 | debug_event(adapter->erp_dbf, 3, &adapter->name, 8); | 3410 | debug_event(adapter->erp_dbf, 3, zfcp_get_busid_by_adapter(adapter), 8); |
3411 | 3411 | ||
3412 | read_lock_irqsave(&zfcp_data.config_lock, flags); | 3412 | read_lock_irqsave(&zfcp_data.config_lock, flags); |
3413 | if (adapter->nameserver_port) | 3413 | if (adapter->nameserver_port) |
diff --git a/drivers/s390/scsi/zfcp_fsf.c b/drivers/s390/scsi/zfcp_fsf.c index 4475e412066c..83b68e3043c8 100644 --- a/drivers/s390/scsi/zfcp_fsf.c +++ b/drivers/s390/scsi/zfcp_fsf.c | |||
@@ -1416,7 +1416,8 @@ zfcp_fsf_send_ct(struct zfcp_send_ct *ct, mempool_t *pool, | |||
1416 | 1416 | ||
1417 | /* settings in QTCB */ | 1417 | /* settings in QTCB */ |
1418 | fsf_req->qtcb->header.port_handle = port->handle; | 1418 | fsf_req->qtcb->header.port_handle = port->handle; |
1419 | fsf_req->qtcb->bottom.support.service_class = adapter->fc_service_class; | 1419 | fsf_req->qtcb->bottom.support.service_class = |
1420 | ZFCP_FC_SERVICE_CLASS_DEFAULT; | ||
1420 | fsf_req->qtcb->bottom.support.timeout = ct->timeout; | 1421 | fsf_req->qtcb->bottom.support.timeout = ct->timeout; |
1421 | fsf_req->data = (unsigned long) ct; | 1422 | fsf_req->data = (unsigned long) ct; |
1422 | 1423 | ||
@@ -1485,18 +1486,10 @@ zfcp_fsf_send_ct_handler(struct zfcp_fsf_req *fsf_req) | |||
1485 | break; | 1486 | break; |
1486 | 1487 | ||
1487 | case FSF_SERVICE_CLASS_NOT_SUPPORTED: | 1488 | case FSF_SERVICE_CLASS_NOT_SUPPORTED: |
1488 | if (adapter->fc_service_class <= 3) { | 1489 | ZFCP_LOG_INFO("error: adapter %s does not support fc " |
1489 | ZFCP_LOG_INFO("error: adapter %s does not support fc " | 1490 | "class %d.\n", |
1490 | "class %d.\n", | 1491 | zfcp_get_busid_by_port(port), |
1491 | zfcp_get_busid_by_port(port), | 1492 | ZFCP_FC_SERVICE_CLASS_DEFAULT); |
1492 | adapter->fc_service_class); | ||
1493 | } else { | ||
1494 | ZFCP_LOG_INFO("bug: The fibre channel class at the " | ||
1495 | "adapter %s is invalid. " | ||
1496 | "(debug info %d)\n", | ||
1497 | zfcp_get_busid_by_port(port), | ||
1498 | adapter->fc_service_class); | ||
1499 | } | ||
1500 | /* stop operation for this adapter */ | 1493 | /* stop operation for this adapter */ |
1501 | debug_text_exception(adapter->erp_dbf, 0, "fsf_s_class_nsup"); | 1494 | debug_text_exception(adapter->erp_dbf, 0, "fsf_s_class_nsup"); |
1502 | zfcp_erp_adapter_shutdown(adapter, 0); | 1495 | zfcp_erp_adapter_shutdown(adapter, 0); |
@@ -1719,7 +1712,8 @@ zfcp_fsf_send_els(struct zfcp_send_els *els) | |||
1719 | 1712 | ||
1720 | /* settings in QTCB */ | 1713 | /* settings in QTCB */ |
1721 | fsf_req->qtcb->bottom.support.d_id = d_id; | 1714 | fsf_req->qtcb->bottom.support.d_id = d_id; |
1722 | fsf_req->qtcb->bottom.support.service_class = adapter->fc_service_class; | 1715 | fsf_req->qtcb->bottom.support.service_class = |
1716 | ZFCP_FC_SERVICE_CLASS_DEFAULT; | ||
1723 | fsf_req->qtcb->bottom.support.timeout = ZFCP_ELS_TIMEOUT; | 1717 | fsf_req->qtcb->bottom.support.timeout = ZFCP_ELS_TIMEOUT; |
1724 | fsf_req->data = (unsigned long) els; | 1718 | fsf_req->data = (unsigned long) els; |
1725 | 1719 | ||
@@ -1789,18 +1783,10 @@ static int zfcp_fsf_send_els_handler(struct zfcp_fsf_req *fsf_req) | |||
1789 | break; | 1783 | break; |
1790 | 1784 | ||
1791 | case FSF_SERVICE_CLASS_NOT_SUPPORTED: | 1785 | case FSF_SERVICE_CLASS_NOT_SUPPORTED: |
1792 | if (adapter->fc_service_class <= 3) { | 1786 | ZFCP_LOG_INFO("error: adapter %s does not support fc " |
1793 | ZFCP_LOG_INFO("error: adapter %s does " | 1787 | "class %d.\n", |
1794 | "not support fibrechannel class %d.\n", | 1788 | zfcp_get_busid_by_adapter(adapter), |
1795 | zfcp_get_busid_by_adapter(adapter), | 1789 | ZFCP_FC_SERVICE_CLASS_DEFAULT); |
1796 | adapter->fc_service_class); | ||
1797 | } else { | ||
1798 | ZFCP_LOG_INFO("bug: The fibrechannel class at " | ||
1799 | "adapter %s is invalid. " | ||
1800 | "(debug info %d)\n", | ||
1801 | zfcp_get_busid_by_adapter(adapter), | ||
1802 | adapter->fc_service_class); | ||
1803 | } | ||
1804 | /* stop operation for this adapter */ | 1790 | /* stop operation for this adapter */ |
1805 | debug_text_exception(adapter->erp_dbf, 0, "fsf_s_class_nsup"); | 1791 | debug_text_exception(adapter->erp_dbf, 0, "fsf_s_class_nsup"); |
1806 | zfcp_erp_adapter_shutdown(adapter, 0); | 1792 | zfcp_erp_adapter_shutdown(adapter, 0); |
@@ -2974,8 +2960,8 @@ zfcp_fsf_open_unit(struct zfcp_erp_action *erp_action) | |||
2974 | erp_action->fsf_req->qtcb->bottom.support.fcp_lun = | 2960 | erp_action->fsf_req->qtcb->bottom.support.fcp_lun = |
2975 | erp_action->unit->fcp_lun; | 2961 | erp_action->unit->fcp_lun; |
2976 | if (!(erp_action->adapter->connection_features & FSF_FEATURE_NPIV_MODE)) | 2962 | if (!(erp_action->adapter->connection_features & FSF_FEATURE_NPIV_MODE)) |
2977 | erp_action->fsf_req->qtcb->bottom.support.option = | 2963 | erp_action->fsf_req->qtcb->bottom.support.option = |
2978 | FSF_OPEN_LUN_SUPPRESS_BOXING; | 2964 | FSF_OPEN_LUN_SUPPRESS_BOXING; |
2979 | atomic_set_mask(ZFCP_STATUS_COMMON_OPENING, &erp_action->unit->status); | 2965 | atomic_set_mask(ZFCP_STATUS_COMMON_OPENING, &erp_action->unit->status); |
2980 | erp_action->fsf_req->data = (unsigned long) erp_action->unit; | 2966 | erp_action->fsf_req->data = (unsigned long) erp_action->unit; |
2981 | erp_action->fsf_req->erp_action = erp_action; | 2967 | erp_action->fsf_req->erp_action = erp_action; |
@@ -3550,7 +3536,7 @@ zfcp_fsf_send_fcp_command_task(struct zfcp_adapter *adapter, | |||
3550 | } | 3536 | } |
3551 | 3537 | ||
3552 | /* set FC service class in QTCB (3 per default) */ | 3538 | /* set FC service class in QTCB (3 per default) */ |
3553 | fsf_req->qtcb->bottom.io.service_class = adapter->fc_service_class; | 3539 | fsf_req->qtcb->bottom.io.service_class = ZFCP_FC_SERVICE_CLASS_DEFAULT; |
3554 | 3540 | ||
3555 | /* set FCP_LUN in FCP_CMND IU in QTCB */ | 3541 | /* set FCP_LUN in FCP_CMND IU in QTCB */ |
3556 | fcp_cmnd_iu->fcp_lun = unit->fcp_lun; | 3542 | fcp_cmnd_iu->fcp_lun = unit->fcp_lun; |
@@ -3689,7 +3675,7 @@ zfcp_fsf_send_fcp_command_task_management(struct zfcp_adapter *adapter, | |||
3689 | fsf_req->qtcb->header.lun_handle = unit->handle; | 3675 | fsf_req->qtcb->header.lun_handle = unit->handle; |
3690 | fsf_req->qtcb->header.port_handle = unit->port->handle; | 3676 | fsf_req->qtcb->header.port_handle = unit->port->handle; |
3691 | fsf_req->qtcb->bottom.io.data_direction = FSF_DATADIR_CMND; | 3677 | fsf_req->qtcb->bottom.io.data_direction = FSF_DATADIR_CMND; |
3692 | fsf_req->qtcb->bottom.io.service_class = adapter->fc_service_class; | 3678 | fsf_req->qtcb->bottom.io.service_class = ZFCP_FC_SERVICE_CLASS_DEFAULT; |
3693 | fsf_req->qtcb->bottom.io.fcp_cmnd_length = | 3679 | fsf_req->qtcb->bottom.io.fcp_cmnd_length = |
3694 | sizeof (struct fcp_cmnd_iu) + sizeof (fcp_dl_t); | 3680 | sizeof (struct fcp_cmnd_iu) + sizeof (fcp_dl_t); |
3695 | 3681 | ||
@@ -3812,18 +3798,10 @@ zfcp_fsf_send_fcp_command_handler(struct zfcp_fsf_req *fsf_req) | |||
3812 | break; | 3798 | break; |
3813 | 3799 | ||
3814 | case FSF_SERVICE_CLASS_NOT_SUPPORTED: | 3800 | case FSF_SERVICE_CLASS_NOT_SUPPORTED: |
3815 | if (fsf_req->adapter->fc_service_class <= 3) { | 3801 | ZFCP_LOG_INFO("error: adapter %s does not support fc " |
3816 | ZFCP_LOG_NORMAL("error: The adapter %s does " | 3802 | "class %d.\n", |
3817 | "not support fibrechannel class %d.\n", | 3803 | zfcp_get_busid_by_unit(unit), |
3818 | zfcp_get_busid_by_unit(unit), | 3804 | ZFCP_FC_SERVICE_CLASS_DEFAULT); |
3819 | fsf_req->adapter->fc_service_class); | ||
3820 | } else { | ||
3821 | ZFCP_LOG_NORMAL("bug: The fibrechannel class at " | ||
3822 | "adapter %s is invalid. " | ||
3823 | "(debug info %d)\n", | ||
3824 | zfcp_get_busid_by_unit(unit), | ||
3825 | fsf_req->adapter->fc_service_class); | ||
3826 | } | ||
3827 | /* stop operation for this adapter */ | 3805 | /* stop operation for this adapter */ |
3828 | debug_text_exception(fsf_req->adapter->erp_dbf, 0, | 3806 | debug_text_exception(fsf_req->adapter->erp_dbf, 0, |
3829 | "fsf_s_class_nsup"); | 3807 | "fsf_s_class_nsup"); |
diff --git a/drivers/s390/scsi/zfcp_fsf.h b/drivers/s390/scsi/zfcp_fsf.h index ca16dca30508..71186618947c 100644 --- a/drivers/s390/scsi/zfcp_fsf.h +++ b/drivers/s390/scsi/zfcp_fsf.h | |||
@@ -22,8 +22,7 @@ | |||
22 | #ifndef FSF_H | 22 | #ifndef FSF_H |
23 | #define FSF_H | 23 | #define FSF_H |
24 | 24 | ||
25 | #define FSF_QTCB_VERSION1 0x00000001 | 25 | #define FSF_QTCB_CURRENT_VERSION 0x00000001 |
26 | #define FSF_QTCB_CURRENT_VERSION FSF_QTCB_VERSION1 | ||
27 | 26 | ||
28 | /* FSF commands */ | 27 | /* FSF commands */ |
29 | #define FSF_QTCB_FCP_CMND 0x00000001 | 28 | #define FSF_QTCB_FCP_CMND 0x00000001 |
@@ -53,7 +52,7 @@ | |||
53 | #define FSF_CFDC_OPTION_FULL_ACCESS 0x00000002 | 52 | #define FSF_CFDC_OPTION_FULL_ACCESS 0x00000002 |
54 | #define FSF_CFDC_OPTION_RESTRICTED_ACCESS 0x00000004 | 53 | #define FSF_CFDC_OPTION_RESTRICTED_ACCESS 0x00000004 |
55 | 54 | ||
56 | /* FSF protocol stati */ | 55 | /* FSF protocol states */ |
57 | #define FSF_PROT_GOOD 0x00000001 | 56 | #define FSF_PROT_GOOD 0x00000001 |
58 | #define FSF_PROT_QTCB_VERSION_ERROR 0x00000010 | 57 | #define FSF_PROT_QTCB_VERSION_ERROR 0x00000010 |
59 | #define FSF_PROT_SEQ_NUMB_ERROR 0x00000020 | 58 | #define FSF_PROT_SEQ_NUMB_ERROR 0x00000020 |
@@ -65,7 +64,7 @@ | |||
65 | #define FSF_PROT_REEST_QUEUE 0x00000800 | 64 | #define FSF_PROT_REEST_QUEUE 0x00000800 |
66 | #define FSF_PROT_ERROR_STATE 0x01000000 | 65 | #define FSF_PROT_ERROR_STATE 0x01000000 |
67 | 66 | ||
68 | /* FSF stati */ | 67 | /* FSF states */ |
69 | #define FSF_GOOD 0x00000000 | 68 | #define FSF_GOOD 0x00000000 |
70 | #define FSF_PORT_ALREADY_OPEN 0x00000001 | 69 | #define FSF_PORT_ALREADY_OPEN 0x00000001 |
71 | #define FSF_LUN_ALREADY_OPEN 0x00000002 | 70 | #define FSF_LUN_ALREADY_OPEN 0x00000002 |
@@ -258,20 +257,6 @@ | |||
258 | #define FSF_UNIT_ACCESS_EXCLUSIVE 0x02000000 | 257 | #define FSF_UNIT_ACCESS_EXCLUSIVE 0x02000000 |
259 | #define FSF_UNIT_ACCESS_OUTBOUND_TRANSFER 0x10000000 | 258 | #define FSF_UNIT_ACCESS_OUTBOUND_TRANSFER 0x10000000 |
260 | 259 | ||
261 | struct fsf_queue_designator; | ||
262 | struct fsf_status_read_buffer; | ||
263 | struct fsf_port_closed_payload; | ||
264 | struct fsf_bit_error_payload; | ||
265 | union fsf_prot_status_qual; | ||
266 | struct fsf_qual_version_error; | ||
267 | struct fsf_qual_sequence_error; | ||
268 | struct fsf_qtcb_prefix; | ||
269 | struct fsf_qtcb_header; | ||
270 | struct fsf_qtcb_bottom_config; | ||
271 | struct fsf_qtcb_bottom_support; | ||
272 | struct fsf_qtcb_bottom_io; | ||
273 | union fsf_qtcb_bottom; | ||
274 | |||
275 | struct fsf_queue_designator { | 260 | struct fsf_queue_designator { |
276 | u8 cssid; | 261 | u8 cssid; |
277 | u8 chpid; | 262 | u8 chpid; |
diff --git a/drivers/s390/scsi/zfcp_qdio.c b/drivers/s390/scsi/zfcp_qdio.c index dfb6644d17b8..345a191926a4 100644 --- a/drivers/s390/scsi/zfcp_qdio.c +++ b/drivers/s390/scsi/zfcp_qdio.c | |||
@@ -168,7 +168,8 @@ zfcp_qdio_allocate(struct zfcp_adapter *adapter) | |||
168 | 168 | ||
169 | init_data->cdev = adapter->ccw_device; | 169 | init_data->cdev = adapter->ccw_device; |
170 | init_data->q_format = QDIO_SCSI_QFMT; | 170 | init_data->q_format = QDIO_SCSI_QFMT; |
171 | memcpy(init_data->adapter_name, &adapter->name, 8); | 171 | memcpy(init_data->adapter_name, zfcp_get_busid_by_adapter(adapter), 8); |
172 | ASCEBC(init_data->adapter_name, 8); | ||
172 | init_data->qib_param_field_format = 0; | 173 | init_data->qib_param_field_format = 0; |
173 | init_data->qib_param_field = NULL; | 174 | init_data->qib_param_field = NULL; |
174 | init_data->input_slib_elements = NULL; | 175 | init_data->input_slib_elements = NULL; |
diff --git a/drivers/s390/scsi/zfcp_scsi.c b/drivers/s390/scsi/zfcp_scsi.c index 3a180d80c3cb..f198814196a4 100644 --- a/drivers/s390/scsi/zfcp_scsi.c +++ b/drivers/s390/scsi/zfcp_scsi.c | |||
@@ -35,8 +35,8 @@ static int zfcp_scsi_eh_host_reset_handler(struct scsi_cmnd *); | |||
35 | static int zfcp_task_management_function(struct zfcp_unit *, u8, | 35 | static int zfcp_task_management_function(struct zfcp_unit *, u8, |
36 | struct scsi_cmnd *); | 36 | struct scsi_cmnd *); |
37 | 37 | ||
38 | static struct zfcp_unit *zfcp_unit_lookup(struct zfcp_adapter *, int, scsi_id_t, | 38 | static struct zfcp_unit *zfcp_unit_lookup(struct zfcp_adapter *, int, |
39 | scsi_lun_t); | 39 | unsigned int, unsigned int); |
40 | 40 | ||
41 | static struct device_attribute *zfcp_sysfs_sdev_attrs[]; | 41 | static struct device_attribute *zfcp_sysfs_sdev_attrs[]; |
42 | 42 | ||
@@ -349,8 +349,8 @@ zfcp_scsi_queuecommand(struct scsi_cmnd *scpnt, | |||
349 | } | 349 | } |
350 | 350 | ||
351 | static struct zfcp_unit * | 351 | static struct zfcp_unit * |
352 | zfcp_unit_lookup(struct zfcp_adapter *adapter, int channel, scsi_id_t id, | 352 | zfcp_unit_lookup(struct zfcp_adapter *adapter, int channel, unsigned int id, |
353 | scsi_lun_t lun) | 353 | unsigned int lun) |
354 | { | 354 | { |
355 | struct zfcp_port *port; | 355 | struct zfcp_port *port; |
356 | struct zfcp_unit *unit, *retval = NULL; | 356 | struct zfcp_unit *unit, *retval = NULL; |
@@ -608,10 +608,6 @@ zfcp_adapter_scsi_register(struct zfcp_adapter *adapter) | |||
608 | adapter->scsi_host->unique_id = unique_id++; /* FIXME */ | 608 | adapter->scsi_host->unique_id = unique_id++; /* FIXME */ |
609 | adapter->scsi_host->max_cmd_len = ZFCP_MAX_SCSI_CMND_LENGTH; | 609 | adapter->scsi_host->max_cmd_len = ZFCP_MAX_SCSI_CMND_LENGTH; |
610 | adapter->scsi_host->transportt = zfcp_transport_template; | 610 | adapter->scsi_host->transportt = zfcp_transport_template; |
611 | /* | ||
612 | * Reverse mapping of the host number to avoid race condition | ||
613 | */ | ||
614 | adapter->scsi_host_no = adapter->scsi_host->host_no; | ||
615 | 611 | ||
616 | /* | 612 | /* |
617 | * save a pointer to our own adapter data structure within | 613 | * save a pointer to our own adapter data structure within |
@@ -647,7 +643,6 @@ zfcp_adapter_scsi_unregister(struct zfcp_adapter *adapter) | |||
647 | scsi_remove_host(shost); | 643 | scsi_remove_host(shost); |
648 | scsi_host_put(shost); | 644 | scsi_host_put(shost); |
649 | adapter->scsi_host = NULL; | 645 | adapter->scsi_host = NULL; |
650 | adapter->scsi_host_no = 0; | ||
651 | atomic_clear_mask(ZFCP_STATUS_ADAPTER_REGISTERED, &adapter->status); | 646 | atomic_clear_mask(ZFCP_STATUS_ADAPTER_REGISTERED, &adapter->status); |
652 | 647 | ||
653 | return; | 648 | return; |