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 /drivers/s390/scsi | |
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>
Diffstat (limited to 'drivers/s390/scsi')
-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 | ||