diff options
| author | Christof Schmitt <christof.schmitt@de.ibm.com> | 2008-10-01 06:42:15 -0400 |
|---|---|---|
| committer | James Bottomley <James.Bottomley@HansenPartnership.com> | 2008-10-03 13:11:52 -0400 |
| commit | ff3b24fa5370a7ca618f212284d9b36fcedb9c0e (patch) | |
| tree | d5631509c630046c9d0a42a4e949179976b0ef9f | |
| parent | 2450d3e7b8604d0abb042817f2502cb7ee0b782f (diff) | |
[SCSI] zfcp: Update message with input from review
Update the kernel messages in zfcp with input from the message review
and remove some messages that have been identified as redundant.
Signed-off-by: Christof Schmitt <christof.schmitt@de.ibm.com>
Signed-off-by: Swen Schillig <swen@vnet.ibm.com>
Signed-off-by: James Bottomley <James.Bottomley@HansenPartnership.com>
| -rw-r--r-- | drivers/s390/scsi/zfcp_aux.c | 8 | ||||
| -rw-r--r-- | drivers/s390/scsi/zfcp_ccw.c | 12 | ||||
| -rw-r--r-- | drivers/s390/scsi/zfcp_dbf.c | 2 | ||||
| -rw-r--r-- | drivers/s390/scsi/zfcp_erp.c | 50 | ||||
| -rw-r--r-- | drivers/s390/scsi/zfcp_fsf.c | 233 | ||||
| -rw-r--r-- | drivers/s390/scsi/zfcp_qdio.c | 26 | ||||
| -rw-r--r-- | drivers/s390/scsi/zfcp_scsi.c | 3 |
7 files changed, 127 insertions, 207 deletions
diff --git a/drivers/s390/scsi/zfcp_aux.c b/drivers/s390/scsi/zfcp_aux.c index 90abfd06ed55..a8c965b6f744 100644 --- a/drivers/s390/scsi/zfcp_aux.c +++ b/drivers/s390/scsi/zfcp_aux.c | |||
| @@ -100,8 +100,7 @@ static int __init zfcp_device_setup(char *devstr) | |||
| 100 | 100 | ||
| 101 | err_out: | 101 | err_out: |
| 102 | kfree(str); | 102 | kfree(str); |
| 103 | pr_err("zfcp: Parse error for device parameter string %s, " | 103 | pr_err("zfcp: %s is not a valid SCSI device\n", devstr); |
| 104 | "device not attached.\n", devstr); | ||
| 105 | return 0; | 104 | return 0; |
| 106 | } | 105 | } |
| 107 | 106 | ||
| @@ -193,13 +192,14 @@ static int __init zfcp_module_init(void) | |||
| 193 | 192 | ||
| 194 | retval = misc_register(&zfcp_cfdc_misc); | 193 | retval = misc_register(&zfcp_cfdc_misc); |
| 195 | if (retval) { | 194 | if (retval) { |
| 196 | pr_err("zfcp: registration of misc device zfcp_cfdc failed\n"); | 195 | pr_err("zfcp: Registering the misc device zfcp_cfdc failed\n"); |
| 197 | goto out_misc; | 196 | goto out_misc; |
| 198 | } | 197 | } |
| 199 | 198 | ||
| 200 | retval = zfcp_ccw_register(); | 199 | retval = zfcp_ccw_register(); |
| 201 | if (retval) { | 200 | if (retval) { |
| 202 | pr_err("zfcp: Registration with common I/O layer failed.\n"); | 201 | pr_err("zfcp: The zfcp device driver could not register with " |
| 202 | "the common I/O layer\n"); | ||
| 203 | goto out_ccw_register; | 203 | goto out_ccw_register; |
| 204 | } | 204 | } |
| 205 | 205 | ||
diff --git a/drivers/s390/scsi/zfcp_ccw.c b/drivers/s390/scsi/zfcp_ccw.c index 51b6a05f4d12..ef8bdfbb55f8 100644 --- a/drivers/s390/scsi/zfcp_ccw.c +++ b/drivers/s390/scsi/zfcp_ccw.c | |||
| @@ -25,7 +25,8 @@ static int zfcp_ccw_probe(struct ccw_device *ccw_device) | |||
| 25 | down(&zfcp_data.config_sema); | 25 | down(&zfcp_data.config_sema); |
| 26 | if (zfcp_adapter_enqueue(ccw_device)) { | 26 | if (zfcp_adapter_enqueue(ccw_device)) { |
| 27 | dev_err(&ccw_device->dev, | 27 | dev_err(&ccw_device->dev, |
| 28 | "Setup of data structures failed.\n"); | 28 | "Setting up data structures for the " |
| 29 | "FCP adapter failed\n"); | ||
| 29 | retval = -EINVAL; | 30 | retval = -EINVAL; |
| 30 | } | 31 | } |
| 31 | up(&zfcp_data.config_sema); | 32 | up(&zfcp_data.config_sema); |
| @@ -156,15 +157,18 @@ static int zfcp_ccw_notify(struct ccw_device *ccw_device, int event) | |||
| 156 | 157 | ||
| 157 | switch (event) { | 158 | switch (event) { |
| 158 | case CIO_GONE: | 159 | case CIO_GONE: |
| 159 | dev_warn(&adapter->ccw_device->dev, "device gone\n"); | 160 | dev_warn(&adapter->ccw_device->dev, |
| 161 | "The FCP device has been detached\n"); | ||
| 160 | zfcp_erp_adapter_shutdown(adapter, 0, 87, NULL); | 162 | zfcp_erp_adapter_shutdown(adapter, 0, 87, NULL); |
| 161 | break; | 163 | break; |
| 162 | case CIO_NO_PATH: | 164 | case CIO_NO_PATH: |
| 163 | dev_warn(&adapter->ccw_device->dev, "no path\n"); | 165 | dev_warn(&adapter->ccw_device->dev, |
| 166 | "The CHPID for the FCP device is offline\n"); | ||
| 164 | zfcp_erp_adapter_shutdown(adapter, 0, 88, NULL); | 167 | zfcp_erp_adapter_shutdown(adapter, 0, 88, NULL); |
| 165 | break; | 168 | break; |
| 166 | case CIO_OPER: | 169 | case CIO_OPER: |
| 167 | dev_info(&adapter->ccw_device->dev, "operational again\n"); | 170 | dev_info(&adapter->ccw_device->dev, |
| 171 | "The FCP device is operational again\n"); | ||
| 168 | zfcp_erp_modify_adapter_status(adapter, 11, NULL, | 172 | zfcp_erp_modify_adapter_status(adapter, 11, NULL, |
| 169 | ZFCP_STATUS_COMMON_RUNNING, | 173 | ZFCP_STATUS_COMMON_RUNNING, |
| 170 | ZFCP_SET); | 174 | ZFCP_SET); |
diff --git a/drivers/s390/scsi/zfcp_dbf.c b/drivers/s390/scsi/zfcp_dbf.c index fca48b88fc53..91b1a364a24c 100644 --- a/drivers/s390/scsi/zfcp_dbf.c +++ b/drivers/s390/scsi/zfcp_dbf.c | |||
| @@ -570,7 +570,7 @@ static const char *zfcp_rec_dbf_ids[] = { | |||
| 570 | [125] = "need newer zfcp", | 570 | [125] = "need newer zfcp", |
| 571 | [126] = "need newer microcode", | 571 | [126] = "need newer microcode", |
| 572 | [127] = "arbitrated loop not supported", | 572 | [127] = "arbitrated loop not supported", |
| 573 | [128] = "unknown topology", | 573 | [128] = "", |
| 574 | [129] = "qtcb size mismatch", | 574 | [129] = "qtcb size mismatch", |
| 575 | [130] = "unknown fsf status ecd", | 575 | [130] = "unknown fsf status ecd", |
| 576 | [131] = "fcp request too big", | 576 | [131] = "fcp request too big", |
diff --git a/drivers/s390/scsi/zfcp_erp.c b/drivers/s390/scsi/zfcp_erp.c index 643ac4bba5b5..4dd8fe70c415 100644 --- a/drivers/s390/scsi/zfcp_erp.c +++ b/drivers/s390/scsi/zfcp_erp.c | |||
| @@ -901,11 +901,6 @@ static int zfcp_erp_open_ptp_port(struct zfcp_erp_action *act) | |||
| 901 | struct zfcp_port *port = act->port; | 901 | struct zfcp_port *port = act->port; |
| 902 | 902 | ||
| 903 | if (port->wwpn != adapter->peer_wwpn) { | 903 | if (port->wwpn != adapter->peer_wwpn) { |
| 904 | dev_err(&adapter->ccw_device->dev, | ||
| 905 | "Failed to open port 0x%016Lx, " | ||
| 906 | "Peer WWPN 0x%016Lx does not " | ||
| 907 | "match.\n", port->wwpn, | ||
| 908 | adapter->peer_wwpn); | ||
| 909 | zfcp_erp_port_failed(port, 25, NULL); | 904 | zfcp_erp_port_failed(port, 25, NULL); |
| 910 | return ZFCP_ERP_FAILED; | 905 | return ZFCP_ERP_FAILED; |
| 911 | } | 906 | } |
| @@ -929,7 +924,8 @@ static int zfcp_erp_port_strategy_open_common(struct zfcp_erp_action *act) | |||
| 929 | return zfcp_erp_open_ptp_port(act); | 924 | return zfcp_erp_open_ptp_port(act); |
| 930 | if (!ns_port) { | 925 | if (!ns_port) { |
| 931 | dev_err(&adapter->ccw_device->dev, | 926 | dev_err(&adapter->ccw_device->dev, |
| 932 | "Nameserver port unavailable.\n"); | 927 | "Attaching the name server port to the " |
| 928 | "FCP device failed\n"); | ||
| 933 | return ZFCP_ERP_FAILED; | 929 | return ZFCP_ERP_FAILED; |
| 934 | } | 930 | } |
| 935 | if (!(atomic_read(&ns_port->status) & | 931 | if (!(atomic_read(&ns_port->status) & |
| @@ -1065,8 +1061,13 @@ static int zfcp_erp_strategy_check_unit(struct zfcp_unit *unit, int result) | |||
| 1065 | break; | 1061 | break; |
| 1066 | case ZFCP_ERP_FAILED : | 1062 | case ZFCP_ERP_FAILED : |
| 1067 | atomic_inc(&unit->erp_counter); | 1063 | atomic_inc(&unit->erp_counter); |
| 1068 | if (atomic_read(&unit->erp_counter) > ZFCP_MAX_ERPS) | 1064 | if (atomic_read(&unit->erp_counter) > ZFCP_MAX_ERPS) { |
| 1065 | dev_err(&unit->port->adapter->ccw_device->dev, | ||
| 1066 | "ERP failed for unit 0x%016Lx on " | ||
| 1067 | "port 0x%016Lx\n", | ||
| 1068 | unit->fcp_lun, unit->port->wwpn); | ||
| 1069 | zfcp_erp_unit_failed(unit, 21, NULL); | 1069 | zfcp_erp_unit_failed(unit, 21, NULL); |
| 1070 | } | ||
| 1070 | break; | 1071 | break; |
| 1071 | } | 1072 | } |
| 1072 | 1073 | ||
| @@ -1091,8 +1092,12 @@ static int zfcp_erp_strategy_check_port(struct zfcp_port *port, int result) | |||
| 1091 | result = ZFCP_ERP_EXIT; | 1092 | result = ZFCP_ERP_EXIT; |
| 1092 | } | 1093 | } |
| 1093 | atomic_inc(&port->erp_counter); | 1094 | atomic_inc(&port->erp_counter); |
| 1094 | if (atomic_read(&port->erp_counter) > ZFCP_MAX_ERPS) | 1095 | if (atomic_read(&port->erp_counter) > ZFCP_MAX_ERPS) { |
| 1096 | dev_err(&port->adapter->ccw_device->dev, | ||
| 1097 | "ERP failed for remote port 0x%016Lx\n", | ||
| 1098 | port->wwpn); | ||
| 1095 | zfcp_erp_port_failed(port, 22, NULL); | 1099 | zfcp_erp_port_failed(port, 22, NULL); |
| 1100 | } | ||
| 1096 | break; | 1101 | break; |
| 1097 | } | 1102 | } |
| 1098 | 1103 | ||
| @@ -1114,8 +1119,12 @@ static int zfcp_erp_strategy_check_adapter(struct zfcp_adapter *adapter, | |||
| 1114 | 1119 | ||
| 1115 | case ZFCP_ERP_FAILED : | 1120 | case ZFCP_ERP_FAILED : |
| 1116 | atomic_inc(&adapter->erp_counter); | 1121 | atomic_inc(&adapter->erp_counter); |
| 1117 | if (atomic_read(&adapter->erp_counter) > ZFCP_MAX_ERPS) | 1122 | if (atomic_read(&adapter->erp_counter) > ZFCP_MAX_ERPS) { |
| 1123 | dev_err(&adapter->ccw_device->dev, | ||
| 1124 | "ERP cannot recover an error " | ||
| 1125 | "on the FCP device\n"); | ||
| 1118 | zfcp_erp_adapter_failed(adapter, 23, NULL); | 1126 | zfcp_erp_adapter_failed(adapter, 23, NULL); |
| 1127 | } | ||
| 1119 | break; | 1128 | break; |
| 1120 | } | 1129 | } |
| 1121 | 1130 | ||
| @@ -1263,8 +1272,7 @@ static void zfcp_erp_schedule_work(struct zfcp_unit *unit) | |||
| 1263 | p = kzalloc(sizeof(*p), GFP_KERNEL); | 1272 | p = kzalloc(sizeof(*p), GFP_KERNEL); |
| 1264 | if (!p) { | 1273 | if (!p) { |
| 1265 | dev_err(&unit->port->adapter->ccw_device->dev, | 1274 | dev_err(&unit->port->adapter->ccw_device->dev, |
| 1266 | "Out of resources. Could not register unit " | 1275 | "Registering unit 0x%016Lx on port 0x%016Lx failed\n", |
| 1267 | "0x%016Lx on port 0x%016Lx with SCSI stack.\n", | ||
| 1268 | unit->fcp_lun, unit->port->wwpn); | 1276 | unit->fcp_lun, unit->port->wwpn); |
| 1269 | return; | 1277 | return; |
| 1270 | } | 1278 | } |
| @@ -1286,8 +1294,8 @@ static void zfcp_erp_rport_register(struct zfcp_port *port) | |||
| 1286 | port->rport = fc_remote_port_add(port->adapter->scsi_host, 0, &ids); | 1294 | port->rport = fc_remote_port_add(port->adapter->scsi_host, 0, &ids); |
| 1287 | if (!port->rport) { | 1295 | if (!port->rport) { |
| 1288 | dev_err(&port->adapter->ccw_device->dev, | 1296 | dev_err(&port->adapter->ccw_device->dev, |
| 1289 | "Failed registration of rport " | 1297 | "Registering port 0x%016Lx failed\n", |
| 1290 | "0x%016Lx.\n", port->wwpn); | 1298 | port->wwpn); |
| 1291 | return; | 1299 | return; |
| 1292 | } | 1300 | } |
| 1293 | 1301 | ||
| @@ -1484,7 +1492,7 @@ int zfcp_erp_thread_setup(struct zfcp_adapter *adapter) | |||
| 1484 | retval = kernel_thread(zfcp_erp_thread, adapter, SIGCHLD); | 1492 | retval = kernel_thread(zfcp_erp_thread, adapter, SIGCHLD); |
| 1485 | if (retval < 0) { | 1493 | if (retval < 0) { |
| 1486 | dev_err(&adapter->ccw_device->dev, | 1494 | dev_err(&adapter->ccw_device->dev, |
| 1487 | "Creation of ERP thread failed.\n"); | 1495 | "Creating an ERP thread for the FCP device failed.\n"); |
| 1488 | return retval; | 1496 | return retval; |
| 1489 | } | 1497 | } |
| 1490 | wait_event(adapter->erp_thread_wqh, | 1498 | wait_event(adapter->erp_thread_wqh, |
| @@ -1526,7 +1534,6 @@ void zfcp_erp_adapter_failed(struct zfcp_adapter *adapter, u8 id, void *ref) | |||
| 1526 | { | 1534 | { |
| 1527 | zfcp_erp_modify_adapter_status(adapter, id, ref, | 1535 | zfcp_erp_modify_adapter_status(adapter, id, ref, |
| 1528 | ZFCP_STATUS_COMMON_ERP_FAILED, ZFCP_SET); | 1536 | ZFCP_STATUS_COMMON_ERP_FAILED, ZFCP_SET); |
| 1529 | dev_err(&adapter->ccw_device->dev, "Adapter ERP failed.\n"); | ||
| 1530 | } | 1537 | } |
| 1531 | 1538 | ||
| 1532 | /** | 1539 | /** |
| @@ -1539,15 +1546,6 @@ void zfcp_erp_port_failed(struct zfcp_port *port, u8 id, void *ref) | |||
| 1539 | { | 1546 | { |
| 1540 | zfcp_erp_modify_port_status(port, id, ref, | 1547 | zfcp_erp_modify_port_status(port, id, ref, |
| 1541 | ZFCP_STATUS_COMMON_ERP_FAILED, ZFCP_SET); | 1548 | ZFCP_STATUS_COMMON_ERP_FAILED, ZFCP_SET); |
| 1542 | |||
| 1543 | if (atomic_read(&port->status) & ZFCP_STATUS_PORT_WKA) | ||
| 1544 | dev_err(&port->adapter->ccw_device->dev, | ||
| 1545 | "Port ERP failed for WKA port d_id=0x%06x.\n", | ||
| 1546 | port->d_id); | ||
| 1547 | else | ||
| 1548 | dev_err(&port->adapter->ccw_device->dev, | ||
| 1549 | "Port ERP failed for port wwpn=0x%016Lx.\n", | ||
| 1550 | port->wwpn); | ||
| 1551 | } | 1549 | } |
| 1552 | 1550 | ||
| 1553 | /** | 1551 | /** |
| @@ -1560,10 +1558,6 @@ void zfcp_erp_unit_failed(struct zfcp_unit *unit, u8 id, void *ref) | |||
| 1560 | { | 1558 | { |
| 1561 | zfcp_erp_modify_unit_status(unit, id, ref, | 1559 | zfcp_erp_modify_unit_status(unit, id, ref, |
| 1562 | ZFCP_STATUS_COMMON_ERP_FAILED, ZFCP_SET); | 1560 | ZFCP_STATUS_COMMON_ERP_FAILED, ZFCP_SET); |
| 1563 | |||
| 1564 | dev_err(&unit->port->adapter->ccw_device->dev, | ||
| 1565 | "Unit ERP failed for unit 0x%016Lx on port 0x%016Lx.\n", | ||
| 1566 | unit->fcp_lun, unit->port->wwpn); | ||
| 1567 | } | 1561 | } |
| 1568 | 1562 | ||
| 1569 | /** | 1563 | /** |
diff --git a/drivers/s390/scsi/zfcp_fsf.c b/drivers/s390/scsi/zfcp_fsf.c index 9e083a5e2c4e..489a1896499e 100644 --- a/drivers/s390/scsi/zfcp_fsf.c +++ b/drivers/s390/scsi/zfcp_fsf.c | |||
| @@ -50,19 +50,16 @@ static u32 fsf_qtcb_type[] = { | |||
| 50 | [FSF_QTCB_UPLOAD_CONTROL_FILE] = FSF_SUPPORT_COMMAND | 50 | [FSF_QTCB_UPLOAD_CONTROL_FILE] = FSF_SUPPORT_COMMAND |
| 51 | }; | 51 | }; |
| 52 | 52 | ||
| 53 | static const char *zfcp_act_subtable_type[] = { | ||
| 54 | "unknown", "OS", "WWPN", "DID", "LUN" | ||
| 55 | }; | ||
| 56 | |||
| 57 | static void zfcp_act_eval_err(struct zfcp_adapter *adapter, u32 table) | 53 | static void zfcp_act_eval_err(struct zfcp_adapter *adapter, u32 table) |
| 58 | { | 54 | { |
| 59 | u16 subtable = table >> 16; | 55 | u16 subtable = table >> 16; |
| 60 | u16 rule = table & 0xffff; | 56 | u16 rule = table & 0xffff; |
| 57 | const char *act_type[] = { "unknown", "OS", "WWPN", "DID", "LUN" }; | ||
| 61 | 58 | ||
| 62 | if (subtable && subtable < ARRAY_SIZE(zfcp_act_subtable_type)) | 59 | if (subtable && subtable < ARRAY_SIZE(act_type)) |
| 63 | dev_warn(&adapter->ccw_device->dev, | 60 | dev_warn(&adapter->ccw_device->dev, |
| 64 | "Access denied in subtable %s, rule %d.\n", | 61 | "Access denied according to ACT rule type %s, " |
| 65 | zfcp_act_subtable_type[subtable], rule); | 62 | "rule %d\n", act_type[subtable], rule); |
| 66 | } | 63 | } |
| 67 | 64 | ||
| 68 | static void zfcp_fsf_access_denied_port(struct zfcp_fsf_req *req, | 65 | static void zfcp_fsf_access_denied_port(struct zfcp_fsf_req *req, |
| @@ -70,7 +67,7 @@ static void zfcp_fsf_access_denied_port(struct zfcp_fsf_req *req, | |||
| 70 | { | 67 | { |
| 71 | struct fsf_qtcb_header *header = &req->qtcb->header; | 68 | struct fsf_qtcb_header *header = &req->qtcb->header; |
| 72 | dev_warn(&req->adapter->ccw_device->dev, | 69 | dev_warn(&req->adapter->ccw_device->dev, |
| 73 | "Access denied, cannot send command to port 0x%016Lx.\n", | 70 | "Access denied to port 0x%016Lx\n", |
| 74 | port->wwpn); | 71 | port->wwpn); |
| 75 | zfcp_act_eval_err(req->adapter, header->fsf_status_qual.halfword[0]); | 72 | zfcp_act_eval_err(req->adapter, header->fsf_status_qual.halfword[0]); |
| 76 | zfcp_act_eval_err(req->adapter, header->fsf_status_qual.halfword[1]); | 73 | zfcp_act_eval_err(req->adapter, header->fsf_status_qual.halfword[1]); |
| @@ -83,7 +80,7 @@ static void zfcp_fsf_access_denied_unit(struct zfcp_fsf_req *req, | |||
| 83 | { | 80 | { |
| 84 | struct fsf_qtcb_header *header = &req->qtcb->header; | 81 | struct fsf_qtcb_header *header = &req->qtcb->header; |
| 85 | dev_warn(&req->adapter->ccw_device->dev, | 82 | dev_warn(&req->adapter->ccw_device->dev, |
| 86 | "Access denied for unit 0x%016Lx on port 0x%016Lx.\n", | 83 | "Access denied to unit 0x%016Lx on port 0x%016Lx\n", |
| 87 | unit->fcp_lun, unit->port->wwpn); | 84 | unit->fcp_lun, unit->port->wwpn); |
| 88 | zfcp_act_eval_err(req->adapter, header->fsf_status_qual.halfword[0]); | 85 | zfcp_act_eval_err(req->adapter, header->fsf_status_qual.halfword[0]); |
| 89 | zfcp_act_eval_err(req->adapter, header->fsf_status_qual.halfword[1]); | 86 | zfcp_act_eval_err(req->adapter, header->fsf_status_qual.halfword[1]); |
| @@ -93,9 +90,8 @@ static void zfcp_fsf_access_denied_unit(struct zfcp_fsf_req *req, | |||
| 93 | 90 | ||
| 94 | static void zfcp_fsf_class_not_supp(struct zfcp_fsf_req *req) | 91 | static void zfcp_fsf_class_not_supp(struct zfcp_fsf_req *req) |
| 95 | { | 92 | { |
| 96 | dev_err(&req->adapter->ccw_device->dev, | 93 | dev_err(&req->adapter->ccw_device->dev, "FCP device not " |
| 97 | "Required FC class not supported by adapter, " | 94 | "operational because of an unsupported FC class\n"); |
| 98 | "shutting down adapter.\n"); | ||
| 99 | zfcp_erp_adapter_shutdown(req->adapter, 0, 123, req); | 95 | zfcp_erp_adapter_shutdown(req->adapter, 0, 123, req); |
| 100 | req->status |= ZFCP_STATUS_FSFREQ_ERROR; | 96 | req->status |= ZFCP_STATUS_FSFREQ_ERROR; |
| 101 | } | 97 | } |
| @@ -171,42 +167,6 @@ static void zfcp_fsf_status_read_port_closed(struct zfcp_fsf_req *req) | |||
| 171 | read_unlock_irqrestore(&zfcp_data.config_lock, flags); | 167 | read_unlock_irqrestore(&zfcp_data.config_lock, flags); |
| 172 | } | 168 | } |
| 173 | 169 | ||
| 174 | static void zfcp_fsf_bit_error_threshold(struct zfcp_fsf_req *req) | ||
| 175 | { | ||
| 176 | struct zfcp_adapter *adapter = req->adapter; | ||
| 177 | struct fsf_status_read_buffer *sr_buf = req->data; | ||
| 178 | struct fsf_bit_error_payload *err = &sr_buf->payload.bit_error; | ||
| 179 | |||
| 180 | dev_warn(&adapter->ccw_device->dev, | ||
| 181 | "Warning: bit error threshold data " | ||
| 182 | "received for the adapter: " | ||
| 183 | "link failures = %i, loss of sync errors = %i, " | ||
| 184 | "loss of signal errors = %i, " | ||
| 185 | "primitive sequence errors = %i, " | ||
| 186 | "invalid transmission word errors = %i, " | ||
| 187 | "CRC errors = %i).\n", | ||
| 188 | err->link_failure_error_count, | ||
| 189 | err->loss_of_sync_error_count, | ||
| 190 | err->loss_of_signal_error_count, | ||
| 191 | err->primitive_sequence_error_count, | ||
| 192 | err->invalid_transmission_word_error_count, | ||
| 193 | err->crc_error_count); | ||
| 194 | dev_warn(&adapter->ccw_device->dev, | ||
| 195 | "Additional bit error threshold data of the adapter: " | ||
| 196 | "primitive sequence event time-outs = %i, " | ||
| 197 | "elastic buffer overrun errors = %i, " | ||
| 198 | "advertised receive buffer-to-buffer credit = %i, " | ||
| 199 | "current receice buffer-to-buffer credit = %i, " | ||
| 200 | "advertised transmit buffer-to-buffer credit = %i, " | ||
| 201 | "current transmit buffer-to-buffer credit = %i).\n", | ||
| 202 | err->primitive_sequence_event_timeout_count, | ||
| 203 | err->elastic_buffer_overrun_error_count, | ||
| 204 | err->advertised_receive_b2b_credit, | ||
| 205 | err->current_receive_b2b_credit, | ||
| 206 | err->advertised_transmit_b2b_credit, | ||
| 207 | err->current_transmit_b2b_credit); | ||
| 208 | } | ||
| 209 | |||
| 210 | static void zfcp_fsf_link_down_info_eval(struct zfcp_fsf_req *req, u8 id, | 170 | static void zfcp_fsf_link_down_info_eval(struct zfcp_fsf_req *req, u8 id, |
| 211 | struct fsf_link_down_info *link_down) | 171 | struct fsf_link_down_info *link_down) |
| 212 | { | 172 | { |
| @@ -223,62 +183,66 @@ static void zfcp_fsf_link_down_info_eval(struct zfcp_fsf_req *req, u8 id, | |||
| 223 | switch (link_down->error_code) { | 183 | switch (link_down->error_code) { |
| 224 | case FSF_PSQ_LINK_NO_LIGHT: | 184 | case FSF_PSQ_LINK_NO_LIGHT: |
| 225 | dev_warn(&req->adapter->ccw_device->dev, | 185 | dev_warn(&req->adapter->ccw_device->dev, |
| 226 | "The local link is down: no light detected.\n"); | 186 | "There is no light signal from the local " |
| 187 | "fibre channel cable\n"); | ||
| 227 | break; | 188 | break; |
| 228 | case FSF_PSQ_LINK_WRAP_PLUG: | 189 | case FSF_PSQ_LINK_WRAP_PLUG: |
| 229 | dev_warn(&req->adapter->ccw_device->dev, | 190 | dev_warn(&req->adapter->ccw_device->dev, |
| 230 | "The local link is down: wrap plug detected.\n"); | 191 | "There is a wrap plug instead of a fibre " |
| 192 | "channel cable\n"); | ||
| 231 | break; | 193 | break; |
| 232 | case FSF_PSQ_LINK_NO_FCP: | 194 | case FSF_PSQ_LINK_NO_FCP: |
| 233 | dev_warn(&req->adapter->ccw_device->dev, | 195 | dev_warn(&req->adapter->ccw_device->dev, |
| 234 | "The local link is down: " | 196 | "The adjacent fibre channel node does not " |
| 235 | "adjacent node on link does not support FCP.\n"); | 197 | "support FCP\n"); |
| 236 | break; | 198 | break; |
| 237 | case FSF_PSQ_LINK_FIRMWARE_UPDATE: | 199 | case FSF_PSQ_LINK_FIRMWARE_UPDATE: |
| 238 | dev_warn(&req->adapter->ccw_device->dev, | 200 | dev_warn(&req->adapter->ccw_device->dev, |
| 239 | "The local link is down: " | 201 | "The FCP device is suspended because of a " |
| 240 | "firmware update in progress.\n"); | 202 | "firmware update\n"); |
| 241 | break; | 203 | break; |
| 242 | case FSF_PSQ_LINK_INVALID_WWPN: | 204 | case FSF_PSQ_LINK_INVALID_WWPN: |
| 243 | dev_warn(&req->adapter->ccw_device->dev, | 205 | dev_warn(&req->adapter->ccw_device->dev, |
| 244 | "The local link is down: " | 206 | "The FCP device detected a WWPN that is " |
| 245 | "duplicate or invalid WWPN detected.\n"); | 207 | "duplicate or not valid\n"); |
| 246 | break; | 208 | break; |
| 247 | case FSF_PSQ_LINK_NO_NPIV_SUPPORT: | 209 | case FSF_PSQ_LINK_NO_NPIV_SUPPORT: |
| 248 | dev_warn(&req->adapter->ccw_device->dev, | 210 | dev_warn(&req->adapter->ccw_device->dev, |
| 249 | "The local link is down: " | 211 | "The fibre channel fabric does not support NPIV\n"); |
| 250 | "no support for NPIV by Fabric.\n"); | ||
| 251 | break; | 212 | break; |
| 252 | case FSF_PSQ_LINK_NO_FCP_RESOURCES: | 213 | case FSF_PSQ_LINK_NO_FCP_RESOURCES: |
| 253 | dev_warn(&req->adapter->ccw_device->dev, | 214 | dev_warn(&req->adapter->ccw_device->dev, |
| 254 | "The local link is down: " | 215 | "The FCP adapter cannot support more NPIV ports\n"); |
| 255 | "out of resource in FCP daughtercard.\n"); | ||
| 256 | break; | 216 | break; |
| 257 | case FSF_PSQ_LINK_NO_FABRIC_RESOURCES: | 217 | case FSF_PSQ_LINK_NO_FABRIC_RESOURCES: |
| 258 | dev_warn(&req->adapter->ccw_device->dev, | 218 | dev_warn(&req->adapter->ccw_device->dev, |
| 259 | "The local link is down: " | 219 | "The adjacent switch cannot support " |
| 260 | "out of resource in Fabric.\n"); | 220 | "more NPIV ports\n"); |
| 261 | break; | 221 | break; |
| 262 | case FSF_PSQ_LINK_FABRIC_LOGIN_UNABLE: | 222 | case FSF_PSQ_LINK_FABRIC_LOGIN_UNABLE: |
| 263 | dev_warn(&req->adapter->ccw_device->dev, | 223 | dev_warn(&req->adapter->ccw_device->dev, |
| 264 | "The local link is down: " | 224 | "The FCP adapter could not log in to the " |
| 265 | "unable to login to Fabric.\n"); | 225 | "fibre channel fabric\n"); |
| 266 | break; | 226 | break; |
| 267 | case FSF_PSQ_LINK_WWPN_ASSIGNMENT_CORRUPTED: | 227 | case FSF_PSQ_LINK_WWPN_ASSIGNMENT_CORRUPTED: |
| 268 | dev_warn(&req->adapter->ccw_device->dev, | 228 | dev_warn(&req->adapter->ccw_device->dev, |
| 269 | "WWPN assignment file corrupted on adapter.\n"); | 229 | "The WWPN assignment file on the FCP adapter " |
| 230 | "has been damaged\n"); | ||
| 270 | break; | 231 | break; |
| 271 | case FSF_PSQ_LINK_MODE_TABLE_CURRUPTED: | 232 | case FSF_PSQ_LINK_MODE_TABLE_CURRUPTED: |
| 272 | dev_warn(&req->adapter->ccw_device->dev, | 233 | dev_warn(&req->adapter->ccw_device->dev, |
| 273 | "Mode table corrupted on adapter.\n"); | 234 | "The mode table on the FCP adapter " |
| 235 | "has been damaged\n"); | ||
| 274 | break; | 236 | break; |
| 275 | case FSF_PSQ_LINK_NO_WWPN_ASSIGNMENT: | 237 | case FSF_PSQ_LINK_NO_WWPN_ASSIGNMENT: |
| 276 | dev_warn(&req->adapter->ccw_device->dev, | 238 | dev_warn(&req->adapter->ccw_device->dev, |
| 277 | "No WWPN for assignment table on adapter.\n"); | 239 | "All NPIV ports on the FCP adapter have " |
| 240 | "been assigned\n"); | ||
| 278 | break; | 241 | break; |
| 279 | default: | 242 | default: |
| 280 | dev_warn(&req->adapter->ccw_device->dev, | 243 | dev_warn(&req->adapter->ccw_device->dev, |
| 281 | "The local link to adapter is down.\n"); | 244 | "The link between the FCP adapter and " |
| 245 | "the FC fabric is down\n"); | ||
| 282 | } | 246 | } |
| 283 | out: | 247 | out: |
| 284 | zfcp_erp_adapter_failed(adapter, id, req); | 248 | zfcp_erp_adapter_failed(adapter, id, req); |
| @@ -286,27 +250,18 @@ out: | |||
| 286 | 250 | ||
| 287 | static void zfcp_fsf_status_read_link_down(struct zfcp_fsf_req *req) | 251 | static void zfcp_fsf_status_read_link_down(struct zfcp_fsf_req *req) |
| 288 | { | 252 | { |
| 289 | struct zfcp_adapter *adapter = req->adapter; | ||
| 290 | struct fsf_status_read_buffer *sr_buf = req->data; | 253 | struct fsf_status_read_buffer *sr_buf = req->data; |
| 291 | struct fsf_link_down_info *ldi = | 254 | struct fsf_link_down_info *ldi = |
| 292 | (struct fsf_link_down_info *) &sr_buf->payload; | 255 | (struct fsf_link_down_info *) &sr_buf->payload; |
| 293 | 256 | ||
| 294 | switch (sr_buf->status_subtype) { | 257 | switch (sr_buf->status_subtype) { |
| 295 | case FSF_STATUS_READ_SUB_NO_PHYSICAL_LINK: | 258 | case FSF_STATUS_READ_SUB_NO_PHYSICAL_LINK: |
| 296 | dev_warn(&adapter->ccw_device->dev, | ||
| 297 | "Physical link is down.\n"); | ||
| 298 | zfcp_fsf_link_down_info_eval(req, 38, ldi); | 259 | zfcp_fsf_link_down_info_eval(req, 38, ldi); |
| 299 | break; | 260 | break; |
| 300 | case FSF_STATUS_READ_SUB_FDISC_FAILED: | 261 | case FSF_STATUS_READ_SUB_FDISC_FAILED: |
| 301 | dev_warn(&adapter->ccw_device->dev, | ||
| 302 | "Local link is down " | ||
| 303 | "due to failed FDISC login.\n"); | ||
| 304 | zfcp_fsf_link_down_info_eval(req, 39, ldi); | 262 | zfcp_fsf_link_down_info_eval(req, 39, ldi); |
| 305 | break; | 263 | break; |
| 306 | case FSF_STATUS_READ_SUB_FIRMWARE_UPDATE: | 264 | case FSF_STATUS_READ_SUB_FIRMWARE_UPDATE: |
| 307 | dev_warn(&adapter->ccw_device->dev, | ||
| 308 | "Local link is down " | ||
| 309 | "due to firmware update on adapter.\n"); | ||
| 310 | zfcp_fsf_link_down_info_eval(req, 40, NULL); | 265 | zfcp_fsf_link_down_info_eval(req, 40, NULL); |
| 311 | }; | 266 | }; |
| 312 | } | 267 | } |
| @@ -335,14 +290,16 @@ static void zfcp_fsf_status_read_handler(struct zfcp_fsf_req *req) | |||
| 335 | case FSF_STATUS_READ_SENSE_DATA_AVAIL: | 290 | case FSF_STATUS_READ_SENSE_DATA_AVAIL: |
| 336 | break; | 291 | break; |
| 337 | case FSF_STATUS_READ_BIT_ERROR_THRESHOLD: | 292 | case FSF_STATUS_READ_BIT_ERROR_THRESHOLD: |
| 338 | zfcp_fsf_bit_error_threshold(req); | 293 | dev_warn(&adapter->ccw_device->dev, |
| 294 | "The error threshold for checksum statistics " | ||
| 295 | "has been exceeded\n"); | ||
| 339 | break; | 296 | break; |
| 340 | case FSF_STATUS_READ_LINK_DOWN: | 297 | case FSF_STATUS_READ_LINK_DOWN: |
| 341 | zfcp_fsf_status_read_link_down(req); | 298 | zfcp_fsf_status_read_link_down(req); |
| 342 | break; | 299 | break; |
| 343 | case FSF_STATUS_READ_LINK_UP: | 300 | case FSF_STATUS_READ_LINK_UP: |
| 344 | dev_info(&adapter->ccw_device->dev, | 301 | dev_info(&adapter->ccw_device->dev, |
| 345 | "Local link was replugged.\n"); | 302 | "The local link has been restored\n"); |
| 346 | /* All ports should be marked as ready to run again */ | 303 | /* All ports should be marked as ready to run again */ |
| 347 | zfcp_erp_modify_adapter_status(adapter, 30, NULL, | 304 | zfcp_erp_modify_adapter_status(adapter, 30, NULL, |
| 348 | ZFCP_STATUS_COMMON_RUNNING, | 305 | ZFCP_STATUS_COMMON_RUNNING, |
| @@ -386,8 +343,8 @@ static void zfcp_fsf_fsfstatus_qual_eval(struct zfcp_fsf_req *req) | |||
| 386 | break; | 343 | break; |
| 387 | case FSF_SQ_NO_RECOM: | 344 | case FSF_SQ_NO_RECOM: |
| 388 | dev_err(&req->adapter->ccw_device->dev, | 345 | dev_err(&req->adapter->ccw_device->dev, |
| 389 | "No recommendation could be given for a " | 346 | "The FCP adapter reported a problem " |
| 390 | "problem on the adapter.\n"); | 347 | "that cannot be recovered\n"); |
| 391 | zfcp_erp_adapter_shutdown(req->adapter, 0, 121, req); | 348 | zfcp_erp_adapter_shutdown(req->adapter, 0, 121, req); |
| 392 | break; | 349 | break; |
| 393 | } | 350 | } |
| @@ -403,8 +360,7 @@ static void zfcp_fsf_fsfstatus_eval(struct zfcp_fsf_req *req) | |||
| 403 | switch (req->qtcb->header.fsf_status) { | 360 | switch (req->qtcb->header.fsf_status) { |
| 404 | case FSF_UNKNOWN_COMMAND: | 361 | case FSF_UNKNOWN_COMMAND: |
| 405 | dev_err(&req->adapter->ccw_device->dev, | 362 | dev_err(&req->adapter->ccw_device->dev, |
| 406 | "Command issued by the device driver (0x%x) is " | 363 | "The FCP adapter does not recognize the command 0x%x\n", |
| 407 | "not known by the adapter.\n", | ||
| 408 | req->qtcb->header.fsf_command); | 364 | req->qtcb->header.fsf_command); |
| 409 | zfcp_erp_adapter_shutdown(req->adapter, 0, 120, req); | 365 | zfcp_erp_adapter_shutdown(req->adapter, 0, 120, req); |
| 410 | req->status |= ZFCP_STATUS_FSFREQ_ERROR; | 366 | req->status |= ZFCP_STATUS_FSFREQ_ERROR; |
| @@ -435,11 +391,9 @@ static void zfcp_fsf_protstatus_eval(struct zfcp_fsf_req *req) | |||
| 435 | return; | 391 | return; |
| 436 | case FSF_PROT_QTCB_VERSION_ERROR: | 392 | case FSF_PROT_QTCB_VERSION_ERROR: |
| 437 | dev_err(&adapter->ccw_device->dev, | 393 | dev_err(&adapter->ccw_device->dev, |
| 438 | "The QTCB version requested by zfcp (0x%x) is not " | 394 | "QTCB version 0x%x not supported by FCP adapter " |
| 439 | "supported by the FCP adapter (lowest supported " | 395 | "(0x%x to 0x%x)\n", FSF_QTCB_CURRENT_VERSION, |
| 440 | "0x%x, highest supported 0x%x).\n", | 396 | psq->word[0], psq->word[1]); |
| 441 | FSF_QTCB_CURRENT_VERSION, psq->word[0], | ||
| 442 | psq->word[1]); | ||
| 443 | zfcp_erp_adapter_shutdown(adapter, 0, 117, req); | 397 | zfcp_erp_adapter_shutdown(adapter, 0, 117, req); |
| 444 | break; | 398 | break; |
| 445 | case FSF_PROT_ERROR_STATE: | 399 | case FSF_PROT_ERROR_STATE: |
| @@ -449,8 +403,7 @@ static void zfcp_fsf_protstatus_eval(struct zfcp_fsf_req *req) | |||
| 449 | break; | 403 | break; |
| 450 | case FSF_PROT_UNSUPP_QTCB_TYPE: | 404 | case FSF_PROT_UNSUPP_QTCB_TYPE: |
| 451 | dev_err(&adapter->ccw_device->dev, | 405 | dev_err(&adapter->ccw_device->dev, |
| 452 | "Packet header type used by the device driver is " | 406 | "The QTCB type is not supported by the FCP adapter\n"); |
| 453 | "incompatible with that used on the adapter.\n"); | ||
| 454 | zfcp_erp_adapter_shutdown(adapter, 0, 118, req); | 407 | zfcp_erp_adapter_shutdown(adapter, 0, 118, req); |
| 455 | break; | 408 | break; |
| 456 | case FSF_PROT_HOST_CONNECTION_INITIALIZING: | 409 | case FSF_PROT_HOST_CONNECTION_INITIALIZING: |
| @@ -459,7 +412,7 @@ static void zfcp_fsf_protstatus_eval(struct zfcp_fsf_req *req) | |||
| 459 | break; | 412 | break; |
| 460 | case FSF_PROT_DUPLICATE_REQUEST_ID: | 413 | case FSF_PROT_DUPLICATE_REQUEST_ID: |
| 461 | dev_err(&adapter->ccw_device->dev, | 414 | dev_err(&adapter->ccw_device->dev, |
| 462 | "The request identifier 0x%Lx is ambiguous.\n", | 415 | "0x%Lx is an ambiguous request identifier\n", |
| 463 | (unsigned long long)qtcb->bottom.support.req_handle); | 416 | (unsigned long long)qtcb->bottom.support.req_handle); |
| 464 | zfcp_erp_adapter_shutdown(adapter, 0, 78, req); | 417 | zfcp_erp_adapter_shutdown(adapter, 0, 78, req); |
| 465 | break; | 418 | break; |
| @@ -479,9 +432,7 @@ static void zfcp_fsf_protstatus_eval(struct zfcp_fsf_req *req) | |||
| 479 | break; | 432 | break; |
| 480 | default: | 433 | default: |
| 481 | dev_err(&adapter->ccw_device->dev, | 434 | dev_err(&adapter->ccw_device->dev, |
| 482 | "Transfer protocol status information" | 435 | "0x%x is not a valid transfer protocol status\n", |
| 483 | "provided by the adapter (0x%x) " | ||
| 484 | "is not compatible with the device driver.\n", | ||
| 485 | qtcb->prefix.prot_status); | 436 | qtcb->prefix.prot_status); |
| 486 | zfcp_erp_adapter_shutdown(adapter, 0, 119, req); | 437 | zfcp_erp_adapter_shutdown(adapter, 0, 119, req); |
| 487 | } | 438 | } |
| @@ -559,33 +510,17 @@ static int zfcp_fsf_exchange_config_evaluate(struct zfcp_fsf_req *req) | |||
| 559 | adapter->peer_wwpn = bottom->plogi_payload.wwpn; | 510 | adapter->peer_wwpn = bottom->plogi_payload.wwpn; |
| 560 | adapter->peer_wwnn = bottom->plogi_payload.wwnn; | 511 | adapter->peer_wwnn = bottom->plogi_payload.wwnn; |
| 561 | fc_host_port_type(shost) = FC_PORTTYPE_PTP; | 512 | fc_host_port_type(shost) = FC_PORTTYPE_PTP; |
| 562 | if (req->erp_action) | ||
| 563 | dev_info(&adapter->ccw_device->dev, | ||
| 564 | "Point-to-Point fibrechannel " | ||
| 565 | "configuration detected.\n"); | ||
| 566 | break; | 513 | break; |
| 567 | case FSF_TOPO_FABRIC: | 514 | case FSF_TOPO_FABRIC: |
| 568 | fc_host_port_type(shost) = FC_PORTTYPE_NPORT; | 515 | fc_host_port_type(shost) = FC_PORTTYPE_NPORT; |
| 569 | if (req->erp_action) | ||
| 570 | dev_info(&adapter->ccw_device->dev, | ||
| 571 | "Switched fabric fibrechannel " | ||
| 572 | "network detected.\n"); | ||
| 573 | break; | 516 | break; |
| 574 | case FSF_TOPO_AL: | 517 | case FSF_TOPO_AL: |
| 575 | fc_host_port_type(shost) = FC_PORTTYPE_NLPORT; | 518 | fc_host_port_type(shost) = FC_PORTTYPE_NLPORT; |
| 576 | dev_err(&adapter->ccw_device->dev, | ||
| 577 | "Unsupported arbitrated loop fibrechannel " | ||
| 578 | "topology detected, shutting down " | ||
| 579 | "adapter.\n"); | ||
| 580 | zfcp_erp_adapter_shutdown(adapter, 0, 127, req); | ||
| 581 | return -EIO; | ||
| 582 | default: | 519 | default: |
| 583 | fc_host_port_type(shost) = FC_PORTTYPE_UNKNOWN; | ||
| 584 | dev_err(&adapter->ccw_device->dev, | 520 | dev_err(&adapter->ccw_device->dev, |
| 585 | "The fibrechannel topology reported by the" | 521 | "Unknown or unsupported arbitrated loop " |
| 586 | " adapter is not known by the zfcp driver," | 522 | "fibre channel topology detected\n"); |
| 587 | " shutting down adapter.\n"); | 523 | zfcp_erp_adapter_shutdown(adapter, 0, 127, req); |
| 588 | zfcp_erp_adapter_shutdown(adapter, 0, 128, req); | ||
| 589 | return -EIO; | 524 | return -EIO; |
| 590 | } | 525 | } |
| 591 | 526 | ||
| @@ -616,11 +551,9 @@ static void zfcp_fsf_exchange_config_data_handler(struct zfcp_fsf_req *req) | |||
| 616 | 551 | ||
| 617 | if (bottom->max_qtcb_size < sizeof(struct fsf_qtcb)) { | 552 | if (bottom->max_qtcb_size < sizeof(struct fsf_qtcb)) { |
| 618 | dev_err(&adapter->ccw_device->dev, | 553 | dev_err(&adapter->ccw_device->dev, |
| 619 | "Maximum QTCB size (%d bytes) allowed by " | 554 | "FCP adapter maximum QTCB size (%d bytes) " |
| 620 | "the adapter is lower than the minimum " | 555 | "is too small\n", |
| 621 | "required by the driver (%ld bytes).\n", | 556 | bottom->max_qtcb_size); |
| 622 | bottom->max_qtcb_size, | ||
| 623 | sizeof(struct fsf_qtcb)); | ||
| 624 | zfcp_erp_adapter_shutdown(adapter, 0, 129, req); | 557 | zfcp_erp_adapter_shutdown(adapter, 0, 129, req); |
| 625 | return; | 558 | return; |
| 626 | } | 559 | } |
| @@ -656,15 +589,15 @@ static void zfcp_fsf_exchange_config_data_handler(struct zfcp_fsf_req *req) | |||
| 656 | 589 | ||
| 657 | if (FSF_QTCB_CURRENT_VERSION < bottom->low_qtcb_version) { | 590 | if (FSF_QTCB_CURRENT_VERSION < bottom->low_qtcb_version) { |
| 658 | dev_err(&adapter->ccw_device->dev, | 591 | dev_err(&adapter->ccw_device->dev, |
| 659 | "The adapter only supports newer control block " | 592 | "The FCP adapter only supports newer " |
| 660 | "versions, try updated device driver.\n"); | 593 | "control block versions\n"); |
| 661 | zfcp_erp_adapter_shutdown(adapter, 0, 125, req); | 594 | zfcp_erp_adapter_shutdown(adapter, 0, 125, req); |
| 662 | return; | 595 | return; |
| 663 | } | 596 | } |
| 664 | if (FSF_QTCB_CURRENT_VERSION > bottom->high_qtcb_version) { | 597 | if (FSF_QTCB_CURRENT_VERSION > bottom->high_qtcb_version) { |
| 665 | dev_err(&adapter->ccw_device->dev, | 598 | dev_err(&adapter->ccw_device->dev, |
| 666 | "The adapter only supports older control block " | 599 | "The FCP adapter only supports older " |
| 667 | "versions, consider a microcode upgrade.\n"); | 600 | "control block versions\n"); |
| 668 | zfcp_erp_adapter_shutdown(adapter, 0, 126, req); | 601 | zfcp_erp_adapter_shutdown(adapter, 0, 126, req); |
| 669 | } | 602 | } |
| 670 | } | 603 | } |
| @@ -1463,9 +1396,8 @@ static void zfcp_fsf_open_port_handler(struct zfcp_fsf_req *req) | |||
| 1463 | break; | 1396 | break; |
| 1464 | case FSF_MAXIMUM_NUMBER_OF_PORTS_EXCEEDED: | 1397 | case FSF_MAXIMUM_NUMBER_OF_PORTS_EXCEEDED: |
| 1465 | dev_warn(&req->adapter->ccw_device->dev, | 1398 | dev_warn(&req->adapter->ccw_device->dev, |
| 1466 | "The adapter is out of resources. The remote port " | 1399 | "Not enough FCP adapter resources to open " |
| 1467 | "0x%016Lx could not be opened, disabling it.\n", | 1400 | "remote port 0x%016Lx\n", port->wwpn); |
| 1468 | port->wwpn); | ||
| 1469 | zfcp_erp_port_failed(port, 31, req); | 1401 | zfcp_erp_port_failed(port, 31, req); |
| 1470 | req->status |= ZFCP_STATUS_FSFREQ_ERROR; | 1402 | req->status |= ZFCP_STATUS_FSFREQ_ERROR; |
| 1471 | break; | 1403 | break; |
| @@ -1477,8 +1409,8 @@ static void zfcp_fsf_open_port_handler(struct zfcp_fsf_req *req) | |||
| 1477 | break; | 1409 | break; |
| 1478 | case FSF_SQ_NO_RETRY_POSSIBLE: | 1410 | case FSF_SQ_NO_RETRY_POSSIBLE: |
| 1479 | dev_warn(&req->adapter->ccw_device->dev, | 1411 | dev_warn(&req->adapter->ccw_device->dev, |
| 1480 | "The remote port 0x%016Lx could not be " | 1412 | "Remote port 0x%016Lx could not be opened\n", |
| 1481 | "opened. Disabling it.\n", port->wwpn); | 1413 | port->wwpn); |
| 1482 | zfcp_erp_port_failed(port, 32, req); | 1414 | zfcp_erp_port_failed(port, 32, req); |
| 1483 | req->status |= ZFCP_STATUS_FSFREQ_ERROR; | 1415 | req->status |= ZFCP_STATUS_FSFREQ_ERROR; |
| 1484 | break; | 1416 | break; |
| @@ -1784,14 +1716,12 @@ static void zfcp_fsf_open_unit_handler(struct zfcp_fsf_req *req) | |||
| 1784 | case FSF_LUN_SHARING_VIOLATION: | 1716 | case FSF_LUN_SHARING_VIOLATION: |
| 1785 | if (header->fsf_status_qual.word[0]) | 1717 | if (header->fsf_status_qual.word[0]) |
| 1786 | dev_warn(&adapter->ccw_device->dev, | 1718 | dev_warn(&adapter->ccw_device->dev, |
| 1787 | "FCP-LUN 0x%Lx at the remote port " | 1719 | "LUN 0x%Lx on port 0x%Lx is already in " |
| 1788 | "with WWPN 0x%Lx " | 1720 | "use by CSS%d, MIF Image ID %x\n", |
| 1789 | "connected to the adapter " | ||
| 1790 | "is already in use in LPAR%d, CSS%d.\n", | ||
| 1791 | unit->fcp_lun, | 1721 | unit->fcp_lun, |
| 1792 | unit->port->wwpn, | 1722 | unit->port->wwpn, |
| 1793 | queue_designator->hla, | 1723 | queue_designator->cssid, |
| 1794 | queue_designator->cssid); | 1724 | queue_designator->hla); |
| 1795 | else | 1725 | else |
| 1796 | zfcp_act_eval_err(adapter, | 1726 | zfcp_act_eval_err(adapter, |
| 1797 | header->fsf_status_qual.word[2]); | 1727 | header->fsf_status_qual.word[2]); |
| @@ -1802,8 +1732,8 @@ static void zfcp_fsf_open_unit_handler(struct zfcp_fsf_req *req) | |||
| 1802 | break; | 1732 | break; |
| 1803 | case FSF_MAXIMUM_NUMBER_OF_LUNS_EXCEEDED: | 1733 | case FSF_MAXIMUM_NUMBER_OF_LUNS_EXCEEDED: |
| 1804 | dev_warn(&adapter->ccw_device->dev, | 1734 | dev_warn(&adapter->ccw_device->dev, |
| 1805 | "The adapter ran out of resources. There is no " | 1735 | "No handle is available for LUN " |
| 1806 | "handle available for unit 0x%016Lx on port 0x%016Lx.", | 1736 | "0x%016Lx on port 0x%016Lx\n", |
| 1807 | unit->fcp_lun, unit->port->wwpn); | 1737 | unit->fcp_lun, unit->port->wwpn); |
| 1808 | zfcp_erp_unit_failed(unit, 34, req); | 1738 | zfcp_erp_unit_failed(unit, 34, req); |
| 1809 | /* fall through */ | 1739 | /* fall through */ |
| @@ -1841,25 +1771,25 @@ static void zfcp_fsf_open_unit_handler(struct zfcp_fsf_req *req) | |||
| 1841 | atomic_set_mask(ZFCP_STATUS_UNIT_READONLY, | 1771 | atomic_set_mask(ZFCP_STATUS_UNIT_READONLY, |
| 1842 | &unit->status); | 1772 | &unit->status); |
| 1843 | dev_info(&adapter->ccw_device->dev, | 1773 | dev_info(&adapter->ccw_device->dev, |
| 1844 | "Read-only access for unit 0x%016Lx " | 1774 | "SCSI device at LUN 0x%016Lx on port " |
| 1845 | "on port 0x%016Lx.\n", | 1775 | "0x%016Lx opened read-only\n", |
| 1846 | unit->fcp_lun, unit->port->wwpn); | 1776 | unit->fcp_lun, unit->port->wwpn); |
| 1847 | } | 1777 | } |
| 1848 | 1778 | ||
| 1849 | if (exclusive && !readwrite) { | 1779 | if (exclusive && !readwrite) { |
| 1850 | dev_err(&adapter->ccw_device->dev, | 1780 | dev_err(&adapter->ccw_device->dev, |
| 1851 | "Exclusive access of read-only unit " | 1781 | "Exclusive read-only access not " |
| 1852 | "0x%016Lx on port 0x%016Lx not " | 1782 | "supported (unit 0x%016Lx, " |
| 1853 | "supported, disabling unit.\n", | 1783 | "port 0x%016Lx)\n", |
| 1854 | unit->fcp_lun, unit->port->wwpn); | 1784 | unit->fcp_lun, unit->port->wwpn); |
| 1855 | zfcp_erp_unit_failed(unit, 35, req); | 1785 | zfcp_erp_unit_failed(unit, 35, req); |
| 1856 | req->status |= ZFCP_STATUS_FSFREQ_ERROR; | 1786 | req->status |= ZFCP_STATUS_FSFREQ_ERROR; |
| 1857 | zfcp_erp_unit_shutdown(unit, 0, 80, req); | 1787 | zfcp_erp_unit_shutdown(unit, 0, 80, req); |
| 1858 | } else if (!exclusive && readwrite) { | 1788 | } else if (!exclusive && readwrite) { |
| 1859 | dev_err(&adapter->ccw_device->dev, | 1789 | dev_err(&adapter->ccw_device->dev, |
| 1860 | "Shared access of read-write unit " | 1790 | "Shared read-write access not " |
| 1861 | "0x%016Lx on port 0x%016Lx not " | 1791 | "supported (unit 0x%016Lx, port " |
| 1862 | "supported, disabling unit.\n", | 1792 | "0x%016Lx\n)", |
| 1863 | unit->fcp_lun, unit->port->wwpn); | 1793 | unit->fcp_lun, unit->port->wwpn); |
| 1864 | zfcp_erp_unit_failed(unit, 36, req); | 1794 | zfcp_erp_unit_failed(unit, 36, req); |
| 1865 | req->status |= ZFCP_STATUS_FSFREQ_ERROR; | 1795 | req->status |= ZFCP_STATUS_FSFREQ_ERROR; |
| @@ -2166,9 +2096,8 @@ static void zfcp_fsf_send_fcp_command_handler(struct zfcp_fsf_req *req) | |||
| 2166 | break; | 2096 | break; |
| 2167 | case FSF_DIRECTION_INDICATOR_NOT_VALID: | 2097 | case FSF_DIRECTION_INDICATOR_NOT_VALID: |
| 2168 | dev_err(&req->adapter->ccw_device->dev, | 2098 | dev_err(&req->adapter->ccw_device->dev, |
| 2169 | "Invalid data direction (%d) given for unit " | 2099 | "Incorrect direction %d, unit 0x%016Lx on port " |
| 2170 | "0x%016Lx on port 0x%016Lx, shutting down " | 2100 | "0x%016Lx closed\n", |
| 2171 | "adapter.\n", | ||
| 2172 | req->qtcb->bottom.io.data_direction, | 2101 | req->qtcb->bottom.io.data_direction, |
| 2173 | unit->fcp_lun, unit->port->wwpn); | 2102 | unit->fcp_lun, unit->port->wwpn); |
| 2174 | zfcp_erp_adapter_shutdown(unit->port->adapter, 0, 133, req); | 2103 | zfcp_erp_adapter_shutdown(unit->port->adapter, 0, 133, req); |
| @@ -2176,9 +2105,8 @@ static void zfcp_fsf_send_fcp_command_handler(struct zfcp_fsf_req *req) | |||
| 2176 | break; | 2105 | break; |
| 2177 | case FSF_CMND_LENGTH_NOT_VALID: | 2106 | case FSF_CMND_LENGTH_NOT_VALID: |
| 2178 | dev_err(&req->adapter->ccw_device->dev, | 2107 | dev_err(&req->adapter->ccw_device->dev, |
| 2179 | "An invalid control-data-block length field (%d) " | 2108 | "Incorrect CDB length %d, unit 0x%016Lx on " |
| 2180 | "was found in a command for unit 0x%016Lx on port " | 2109 | "port 0x%016Lx closed\n", |
| 2181 | "0x%016Lx. Shutting down adapter.\n", | ||
| 2182 | req->qtcb->bottom.io.fcp_cmnd_length, | 2110 | req->qtcb->bottom.io.fcp_cmnd_length, |
| 2183 | unit->fcp_lun, unit->port->wwpn); | 2111 | unit->fcp_lun, unit->port->wwpn); |
| 2184 | zfcp_erp_adapter_shutdown(unit->port->adapter, 0, 134, req); | 2112 | zfcp_erp_adapter_shutdown(unit->port->adapter, 0, 134, req); |
| @@ -2306,10 +2234,9 @@ int zfcp_fsf_send_fcp_command_task(struct zfcp_adapter *adapter, | |||
| 2306 | retval = -EIO; | 2234 | retval = -EIO; |
| 2307 | else { | 2235 | else { |
| 2308 | dev_err(&adapter->ccw_device->dev, | 2236 | dev_err(&adapter->ccw_device->dev, |
| 2309 | "SCSI request too large. " | 2237 | "Oversize data package, unit 0x%016Lx " |
| 2310 | "Shutting down unit 0x%016Lx on port " | 2238 | "on port 0x%016Lx closed\n", |
| 2311 | "0x%016Lx.\n", unit->fcp_lun, | 2239 | unit->fcp_lun, unit->port->wwpn); |
| 2312 | unit->port->wwpn); | ||
| 2313 | zfcp_erp_unit_shutdown(unit, 0, 131, req); | 2240 | zfcp_erp_unit_shutdown(unit, 0, 131, req); |
| 2314 | retval = -EINVAL; | 2241 | retval = -EINVAL; |
| 2315 | } | 2242 | } |
diff --git a/drivers/s390/scsi/zfcp_qdio.c b/drivers/s390/scsi/zfcp_qdio.c index cc49eaa9281f..9c5b84980901 100644 --- a/drivers/s390/scsi/zfcp_qdio.c +++ b/drivers/s390/scsi/zfcp_qdio.c | |||
| @@ -57,7 +57,7 @@ void zfcp_qdio_free(struct zfcp_adapter *adapter) | |||
| 57 | 57 | ||
| 58 | static void zfcp_qdio_handler_error(struct zfcp_adapter *adapter, u8 id) | 58 | static void zfcp_qdio_handler_error(struct zfcp_adapter *adapter, u8 id) |
| 59 | { | 59 | { |
| 60 | dev_warn(&adapter->ccw_device->dev, "QDIO problem occurred.\n"); | 60 | dev_warn(&adapter->ccw_device->dev, "A QDIO problem occurred\n"); |
| 61 | 61 | ||
| 62 | zfcp_erp_adapter_reopen(adapter, | 62 | zfcp_erp_adapter_reopen(adapter, |
| 63 | ZFCP_STATUS_ADAPTER_LINK_UNPLUGGED | | 63 | ZFCP_STATUS_ADAPTER_LINK_UNPLUGGED | |
| @@ -174,8 +174,8 @@ static void zfcp_qdio_int_resp(struct ccw_device *cdev, unsigned int qdio_err, | |||
| 174 | 174 | ||
| 175 | if (unlikely(!(sbale->flags & SBAL_FLAGS_LAST_ENTRY))) | 175 | if (unlikely(!(sbale->flags & SBAL_FLAGS_LAST_ENTRY))) |
| 176 | dev_warn(&adapter->ccw_device->dev, | 176 | dev_warn(&adapter->ccw_device->dev, |
| 177 | "Protocol violation by adapter. " | 177 | "A QDIO protocol error occurred, " |
| 178 | "Continuing operations.\n"); | 178 | "operations continue\n"); |
| 179 | } | 179 | } |
| 180 | 180 | ||
| 181 | /* | 181 | /* |
| @@ -457,17 +457,11 @@ int zfcp_qdio_open(struct zfcp_adapter *adapter) | |||
| 457 | if (atomic_test_mask(ZFCP_STATUS_ADAPTER_QDIOUP, &adapter->status)) | 457 | if (atomic_test_mask(ZFCP_STATUS_ADAPTER_QDIOUP, &adapter->status)) |
| 458 | return -EIO; | 458 | return -EIO; |
| 459 | 459 | ||
| 460 | if (qdio_establish(&adapter->qdio_init_data)) { | 460 | if (qdio_establish(&adapter->qdio_init_data)) |
| 461 | dev_err(&adapter->ccw_device->dev, | 461 | goto failed_establish; |
| 462 | "Establish of QDIO queues failed.\n"); | ||
| 463 | return -EIO; | ||
| 464 | } | ||
| 465 | 462 | ||
| 466 | if (qdio_activate(adapter->ccw_device)) { | 463 | if (qdio_activate(adapter->ccw_device)) |
| 467 | dev_err(&adapter->ccw_device->dev, | ||
| 468 | "Activate of QDIO queues failed.\n"); | ||
| 469 | goto failed_qdio; | 464 | goto failed_qdio; |
| 470 | } | ||
| 471 | 465 | ||
| 472 | for (cc = 0; cc < QDIO_MAX_BUFFERS_PER_Q; cc++) { | 466 | for (cc = 0; cc < QDIO_MAX_BUFFERS_PER_Q; cc++) { |
| 473 | sbale = &(adapter->resp_q.sbal[cc]->element[0]); | 467 | sbale = &(adapter->resp_q.sbal[cc]->element[0]); |
| @@ -477,11 +471,8 @@ int zfcp_qdio_open(struct zfcp_adapter *adapter) | |||
| 477 | } | 471 | } |
| 478 | 472 | ||
| 479 | if (do_QDIO(adapter->ccw_device, QDIO_FLAG_SYNC_INPUT, 0, 0, | 473 | if (do_QDIO(adapter->ccw_device, QDIO_FLAG_SYNC_INPUT, 0, 0, |
| 480 | QDIO_MAX_BUFFERS_PER_Q)) { | 474 | QDIO_MAX_BUFFERS_PER_Q)) |
| 481 | dev_err(&adapter->ccw_device->dev, | ||
| 482 | "Init of QDIO response queue failed.\n"); | ||
| 483 | goto failed_qdio; | 475 | goto failed_qdio; |
| 484 | } | ||
| 485 | 476 | ||
| 486 | /* set index of first avalable SBALS / number of available SBALS */ | 477 | /* set index of first avalable SBALS / number of available SBALS */ |
| 487 | adapter->req_q.first = 0; | 478 | adapter->req_q.first = 0; |
| @@ -492,5 +483,8 @@ int zfcp_qdio_open(struct zfcp_adapter *adapter) | |||
| 492 | 483 | ||
| 493 | failed_qdio: | 484 | failed_qdio: |
| 494 | qdio_shutdown(adapter->ccw_device, QDIO_FLAG_CLEANUP_USING_CLEAR); | 485 | qdio_shutdown(adapter->ccw_device, QDIO_FLAG_CLEANUP_USING_CLEAR); |
| 486 | failed_establish: | ||
| 487 | dev_err(&adapter->ccw_device->dev, | ||
| 488 | "Setting up the QDIO connection to the FCP adapter failed\n"); | ||
| 495 | return -EIO; | 489 | return -EIO; |
| 496 | } | 490 | } |
diff --git a/drivers/s390/scsi/zfcp_scsi.c b/drivers/s390/scsi/zfcp_scsi.c index aeae56b00b45..6348cc5520e1 100644 --- a/drivers/s390/scsi/zfcp_scsi.c +++ b/drivers/s390/scsi/zfcp_scsi.c | |||
| @@ -294,7 +294,8 @@ int zfcp_adapter_scsi_register(struct zfcp_adapter *adapter) | |||
| 294 | sizeof (struct zfcp_adapter *)); | 294 | sizeof (struct zfcp_adapter *)); |
| 295 | if (!adapter->scsi_host) { | 295 | if (!adapter->scsi_host) { |
| 296 | dev_err(&adapter->ccw_device->dev, | 296 | dev_err(&adapter->ccw_device->dev, |
| 297 | "registration with SCSI stack failed."); | 297 | "Registering the FCP device with the " |
| 298 | "SCSI stack failed\n"); | ||
| 298 | return -EIO; | 299 | return -EIO; |
| 299 | } | 300 | } |
| 300 | 301 | ||
