diff options
Diffstat (limited to 'drivers/s390/scsi')
-rw-r--r-- | drivers/s390/scsi/zfcp_aux.c | 37 | ||||
-rw-r--r-- | drivers/s390/scsi/zfcp_def.h | 25 | ||||
-rw-r--r-- | drivers/s390/scsi/zfcp_erp.c | 121 | ||||
-rw-r--r-- | drivers/s390/scsi/zfcp_ext.h | 4 | ||||
-rw-r--r-- | drivers/s390/scsi/zfcp_fsf.c | 324 | ||||
-rw-r--r-- | drivers/s390/scsi/zfcp_qdio.c | 68 | ||||
-rw-r--r-- | drivers/s390/scsi/zfcp_scsi.c | 24 |
7 files changed, 188 insertions, 415 deletions
diff --git a/drivers/s390/scsi/zfcp_aux.c b/drivers/s390/scsi/zfcp_aux.c index 68d151aaa474..e17b4d58a9f6 100644 --- a/drivers/s390/scsi/zfcp_aux.c +++ b/drivers/s390/scsi/zfcp_aux.c | |||
@@ -97,11 +97,6 @@ MODULE_PARM_DESC(loglevel, | |||
97 | "FC ERP QDIO CIO Config FSF SCSI Other, " | 97 | "FC ERP QDIO CIO Config FSF SCSI Other, " |
98 | "levels: 0=none 1=normal 2=devel 3=trace"); | 98 | "levels: 0=none 1=normal 2=devel 3=trace"); |
99 | 99 | ||
100 | #ifdef ZFCP_PRINT_FLAGS | ||
101 | u32 flags_dump = 0; | ||
102 | module_param(flags_dump, uint, 0); | ||
103 | #endif | ||
104 | |||
105 | /****************************************************************/ | 100 | /****************************************************************/ |
106 | /************** Functions without logging ***********************/ | 101 | /************** Functions without logging ***********************/ |
107 | /****************************************************************/ | 102 | /****************************************************************/ |
@@ -223,13 +218,20 @@ zfcp_in_els_dbf_event(struct zfcp_adapter *adapter, const char *text, | |||
223 | * Parse "device=..." parameter string. | 218 | * Parse "device=..." parameter string. |
224 | */ | 219 | */ |
225 | static int __init | 220 | static int __init |
226 | zfcp_device_setup(char *str) | 221 | zfcp_device_setup(char *devstr) |
227 | { | 222 | { |
228 | char *tmp; | 223 | char *tmp, *str; |
224 | size_t len; | ||
229 | 225 | ||
230 | if (!str) | 226 | if (!devstr) |
231 | return 0; | 227 | return 0; |
232 | 228 | ||
229 | len = strlen(devstr) + 1; | ||
230 | str = (char *) kmalloc(len, GFP_KERNEL); | ||
231 | if (!str) | ||
232 | goto err_out; | ||
233 | memcpy(str, devstr, len); | ||
234 | |||
233 | tmp = strchr(str, ','); | 235 | tmp = strchr(str, ','); |
234 | if (!tmp) | 236 | if (!tmp) |
235 | goto err_out; | 237 | goto err_out; |
@@ -246,10 +248,12 @@ zfcp_device_setup(char *str) | |||
246 | zfcp_data.init_fcp_lun = simple_strtoull(tmp, &tmp, 0); | 248 | zfcp_data.init_fcp_lun = simple_strtoull(tmp, &tmp, 0); |
247 | if (*tmp != '\0') | 249 | if (*tmp != '\0') |
248 | goto err_out; | 250 | goto err_out; |
251 | kfree(str); | ||
249 | return 1; | 252 | return 1; |
250 | 253 | ||
251 | err_out: | 254 | err_out: |
252 | ZFCP_LOG_NORMAL("Parse error for device parameter string %s\n", str); | 255 | ZFCP_LOG_NORMAL("Parse error for device parameter string %s\n", str); |
256 | kfree(str); | ||
253 | return 0; | 257 | return 0; |
254 | } | 258 | } |
255 | 259 | ||
@@ -525,7 +529,7 @@ zfcp_cfdc_dev_ioctl(struct file *file, unsigned int command, | |||
525 | 529 | ||
526 | out: | 530 | out: |
527 | if (fsf_req != NULL) | 531 | if (fsf_req != NULL) |
528 | zfcp_fsf_req_cleanup(fsf_req); | 532 | zfcp_fsf_req_free(fsf_req); |
529 | 533 | ||
530 | if ((adapter != NULL) && (retval != -ENXIO)) | 534 | if ((adapter != NULL) && (retval != -ENXIO)) |
531 | zfcp_adapter_put(adapter); | 535 | zfcp_adapter_put(adapter); |
@@ -1154,7 +1158,7 @@ zfcp_adapter_enqueue(struct ccw_device *ccw_device) | |||
1154 | INIT_LIST_HEAD(&adapter->port_remove_lh); | 1158 | INIT_LIST_HEAD(&adapter->port_remove_lh); |
1155 | 1159 | ||
1156 | /* initialize list of fsf requests */ | 1160 | /* initialize list of fsf requests */ |
1157 | rwlock_init(&adapter->fsf_req_list_lock); | 1161 | spin_lock_init(&adapter->fsf_req_list_lock); |
1158 | INIT_LIST_HEAD(&adapter->fsf_req_list_head); | 1162 | INIT_LIST_HEAD(&adapter->fsf_req_list_head); |
1159 | 1163 | ||
1160 | /* initialize abort lock */ | 1164 | /* initialize abort lock */ |
@@ -1239,9 +1243,9 @@ zfcp_adapter_dequeue(struct zfcp_adapter *adapter) | |||
1239 | zfcp_sysfs_adapter_remove_files(&adapter->ccw_device->dev); | 1243 | zfcp_sysfs_adapter_remove_files(&adapter->ccw_device->dev); |
1240 | dev_set_drvdata(&adapter->ccw_device->dev, NULL); | 1244 | dev_set_drvdata(&adapter->ccw_device->dev, NULL); |
1241 | /* sanity check: no pending FSF requests */ | 1245 | /* sanity check: no pending FSF requests */ |
1242 | read_lock_irqsave(&adapter->fsf_req_list_lock, flags); | 1246 | spin_lock_irqsave(&adapter->fsf_req_list_lock, flags); |
1243 | retval = !list_empty(&adapter->fsf_req_list_head); | 1247 | retval = !list_empty(&adapter->fsf_req_list_head); |
1244 | read_unlock_irqrestore(&adapter->fsf_req_list_lock, flags); | 1248 | spin_unlock_irqrestore(&adapter->fsf_req_list_lock, flags); |
1245 | if (retval) { | 1249 | if (retval) { |
1246 | ZFCP_LOG_NORMAL("bug: adapter %s (%p) still in use, " | 1250 | ZFCP_LOG_NORMAL("bug: adapter %s (%p) still in use, " |
1247 | "%i requests outstanding\n", | 1251 | "%i requests outstanding\n", |
@@ -1483,19 +1487,15 @@ zfcp_fsf_incoming_els_rscn(struct zfcp_adapter *adapter, | |||
1483 | fcp_rscn_element++; | 1487 | fcp_rscn_element++; |
1484 | switch (fcp_rscn_element->addr_format) { | 1488 | switch (fcp_rscn_element->addr_format) { |
1485 | case ZFCP_PORT_ADDRESS: | 1489 | case ZFCP_PORT_ADDRESS: |
1486 | ZFCP_LOG_FLAGS(1, "ZFCP_PORT_ADDRESS\n"); | ||
1487 | range_mask = ZFCP_PORTS_RANGE_PORT; | 1490 | range_mask = ZFCP_PORTS_RANGE_PORT; |
1488 | break; | 1491 | break; |
1489 | case ZFCP_AREA_ADDRESS: | 1492 | case ZFCP_AREA_ADDRESS: |
1490 | ZFCP_LOG_FLAGS(1, "ZFCP_AREA_ADDRESS\n"); | ||
1491 | range_mask = ZFCP_PORTS_RANGE_AREA; | 1493 | range_mask = ZFCP_PORTS_RANGE_AREA; |
1492 | break; | 1494 | break; |
1493 | case ZFCP_DOMAIN_ADDRESS: | 1495 | case ZFCP_DOMAIN_ADDRESS: |
1494 | ZFCP_LOG_FLAGS(1, "ZFCP_DOMAIN_ADDRESS\n"); | ||
1495 | range_mask = ZFCP_PORTS_RANGE_DOMAIN; | 1496 | range_mask = ZFCP_PORTS_RANGE_DOMAIN; |
1496 | break; | 1497 | break; |
1497 | case ZFCP_FABRIC_ADDRESS: | 1498 | case ZFCP_FABRIC_ADDRESS: |
1498 | ZFCP_LOG_FLAGS(1, "ZFCP_FABRIC_ADDRESS\n"); | ||
1499 | range_mask = ZFCP_PORTS_RANGE_FABRIC; | 1499 | range_mask = ZFCP_PORTS_RANGE_FABRIC; |
1500 | break; | 1500 | break; |
1501 | default: | 1501 | default: |
@@ -1762,7 +1762,10 @@ static void zfcp_ns_gid_pn_handler(unsigned long data) | |||
1762 | ct_iu_req = zfcp_sg_to_address(ct->req); | 1762 | ct_iu_req = zfcp_sg_to_address(ct->req); |
1763 | ct_iu_resp = zfcp_sg_to_address(ct->resp); | 1763 | ct_iu_resp = zfcp_sg_to_address(ct->resp); |
1764 | 1764 | ||
1765 | if ((ct->status != 0) || zfcp_check_ct_response(&ct_iu_resp->header)) { | 1765 | if (ct->status != 0) |
1766 | goto failed; | ||
1767 | |||
1768 | if (zfcp_check_ct_response(&ct_iu_resp->header)) { | ||
1766 | /* FIXME: do we need some specific erp entry points */ | 1769 | /* FIXME: do we need some specific erp entry points */ |
1767 | atomic_set_mask(ZFCP_STATUS_PORT_INVALID_WWPN, &port->status); | 1770 | atomic_set_mask(ZFCP_STATUS_PORT_INVALID_WWPN, &port->status); |
1768 | goto failed; | 1771 | goto failed; |
diff --git a/drivers/s390/scsi/zfcp_def.h b/drivers/s390/scsi/zfcp_def.h index c5daf372f853..4103b5be7683 100644 --- a/drivers/s390/scsi/zfcp_def.h +++ b/drivers/s390/scsi/zfcp_def.h | |||
@@ -62,9 +62,6 @@ | |||
62 | #include <linux/syscalls.h> | 62 | #include <linux/syscalls.h> |
63 | #include <linux/ioctl.h> | 63 | #include <linux/ioctl.h> |
64 | 64 | ||
65 | /************************ DEBUG FLAGS *****************************************/ | ||
66 | |||
67 | #define ZFCP_PRINT_FLAGS | ||
68 | 65 | ||
69 | /********************* GENERAL DEFINES *********************************/ | 66 | /********************* GENERAL DEFINES *********************************/ |
70 | 67 | ||
@@ -152,8 +149,10 @@ typedef u32 scsi_lun_t; | |||
152 | #define FSF_QTCB_UNSOLICITED_STATUS 0x6305 | 149 | #define FSF_QTCB_UNSOLICITED_STATUS 0x6305 |
153 | #define ZFCP_STATUS_READ_FAILED_THRESHOLD 3 | 150 | #define ZFCP_STATUS_READ_FAILED_THRESHOLD 3 |
154 | #define ZFCP_STATUS_READS_RECOM FSF_STATUS_READS_RECOM | 151 | #define ZFCP_STATUS_READS_RECOM FSF_STATUS_READS_RECOM |
155 | #define ZFCP_EXCHANGE_CONFIG_DATA_RETRIES 6 | 152 | |
156 | #define ZFCP_EXCHANGE_CONFIG_DATA_SLEEP 50 | 153 | /* Do 1st retry in 1 second, then double the timeout for each following retry */ |
154 | #define ZFCP_EXCHANGE_CONFIG_DATA_FIRST_SLEEP 100 | ||
155 | #define ZFCP_EXCHANGE_CONFIG_DATA_RETRIES 7 | ||
157 | 156 | ||
158 | /* timeout value for "default timer" for fsf requests */ | 157 | /* timeout value for "default timer" for fsf requests */ |
159 | #define ZFCP_FSF_REQUEST_TIMEOUT (60*HZ); | 158 | #define ZFCP_FSF_REQUEST_TIMEOUT (60*HZ); |
@@ -472,17 +471,6 @@ do { \ | |||
472 | ZFCP_LOG(ZFCP_LOG_LEVEL_TRACE, fmt , ##args) | 471 | ZFCP_LOG(ZFCP_LOG_LEVEL_TRACE, fmt , ##args) |
473 | #endif | 472 | #endif |
474 | 473 | ||
475 | #ifndef ZFCP_PRINT_FLAGS | ||
476 | # define ZFCP_LOG_FLAGS(level, fmt, args...) | ||
477 | #else | ||
478 | extern u32 flags_dump; | ||
479 | # define ZFCP_LOG_FLAGS(level, fmt, args...) \ | ||
480 | do { \ | ||
481 | if (level <= flags_dump) \ | ||
482 | _ZFCP_LOG(fmt, ##args); \ | ||
483 | } while (0) | ||
484 | #endif | ||
485 | |||
486 | /*************** ADAPTER/PORT/UNIT AND FSF_REQ STATUS FLAGS ******************/ | 474 | /*************** ADAPTER/PORT/UNIT AND FSF_REQ STATUS FLAGS ******************/ |
487 | 475 | ||
488 | /* | 476 | /* |
@@ -502,6 +490,7 @@ do { \ | |||
502 | #define ZFCP_STATUS_COMMON_CLOSING 0x02000000 | 490 | #define ZFCP_STATUS_COMMON_CLOSING 0x02000000 |
503 | #define ZFCP_STATUS_COMMON_ERP_INUSE 0x01000000 | 491 | #define ZFCP_STATUS_COMMON_ERP_INUSE 0x01000000 |
504 | #define ZFCP_STATUS_COMMON_ACCESS_DENIED 0x00800000 | 492 | #define ZFCP_STATUS_COMMON_ACCESS_DENIED 0x00800000 |
493 | #define ZFCP_STATUS_COMMON_ACCESS_BOXED 0x00400000 | ||
505 | 494 | ||
506 | /* adapter status */ | 495 | /* adapter status */ |
507 | #define ZFCP_STATUS_ADAPTER_QDIOUP 0x00000002 | 496 | #define ZFCP_STATUS_ADAPTER_QDIOUP 0x00000002 |
@@ -763,6 +752,7 @@ typedef void (*zfcp_send_els_handler_t)(unsigned long); | |||
763 | /** | 752 | /** |
764 | * struct zfcp_send_els - used to pass parameters to function zfcp_fsf_send_els | 753 | * struct zfcp_send_els - used to pass parameters to function zfcp_fsf_send_els |
765 | * @adapter: adapter where request is sent from | 754 | * @adapter: adapter where request is sent from |
755 | * @port: port where ELS is destinated (port reference count has to be increased) | ||
766 | * @d_id: destiniation id of port where request is sent to | 756 | * @d_id: destiniation id of port where request is sent to |
767 | * @req: scatter-gather list for request | 757 | * @req: scatter-gather list for request |
768 | * @resp: scatter-gather list for response | 758 | * @resp: scatter-gather list for response |
@@ -777,6 +767,7 @@ typedef void (*zfcp_send_els_handler_t)(unsigned long); | |||
777 | */ | 767 | */ |
778 | struct zfcp_send_els { | 768 | struct zfcp_send_els { |
779 | struct zfcp_adapter *adapter; | 769 | struct zfcp_adapter *adapter; |
770 | struct zfcp_port *port; | ||
780 | fc_id_t d_id; | 771 | fc_id_t d_id; |
781 | struct scatterlist *req; | 772 | struct scatterlist *req; |
782 | struct scatterlist *resp; | 773 | struct scatterlist *resp; |
@@ -871,7 +862,7 @@ struct zfcp_adapter { | |||
871 | u32 ports; /* number of remote ports */ | 862 | u32 ports; /* number of remote ports */ |
872 | struct timer_list scsi_er_timer; /* SCSI err recovery watch */ | 863 | struct timer_list scsi_er_timer; /* SCSI err recovery watch */ |
873 | struct list_head fsf_req_list_head; /* head of FSF req list */ | 864 | struct list_head fsf_req_list_head; /* head of FSF req list */ |
874 | rwlock_t fsf_req_list_lock; /* lock for ops on list of | 865 | spinlock_t fsf_req_list_lock; /* lock for ops on list of |
875 | FSF requests */ | 866 | FSF requests */ |
876 | atomic_t fsf_reqs_active; /* # active FSF reqs */ | 867 | atomic_t fsf_reqs_active; /* # active FSF reqs */ |
877 | struct zfcp_qdio_queue request_queue; /* request queue */ | 868 | struct zfcp_qdio_queue request_queue; /* request queue */ |
diff --git a/drivers/s390/scsi/zfcp_erp.c b/drivers/s390/scsi/zfcp_erp.c index 53ebc1cdfe2d..0cf31f7d1c0f 100644 --- a/drivers/s390/scsi/zfcp_erp.c +++ b/drivers/s390/scsi/zfcp_erp.c | |||
@@ -35,7 +35,7 @@ | |||
35 | 35 | ||
36 | #include "zfcp_ext.h" | 36 | #include "zfcp_ext.h" |
37 | 37 | ||
38 | static int zfcp_erp_adisc(struct zfcp_adapter *, fc_id_t); | 38 | static int zfcp_erp_adisc(struct zfcp_port *); |
39 | static void zfcp_erp_adisc_handler(unsigned long); | 39 | static void zfcp_erp_adisc_handler(unsigned long); |
40 | 40 | ||
41 | static int zfcp_erp_adapter_reopen_internal(struct zfcp_adapter *, int); | 41 | static int zfcp_erp_adapter_reopen_internal(struct zfcp_adapter *, int); |
@@ -295,12 +295,12 @@ zfcp_erp_unit_shutdown(struct zfcp_unit *unit, int clear_mask) | |||
295 | 295 | ||
296 | /** | 296 | /** |
297 | * zfcp_erp_adisc - send ADISC ELS command | 297 | * zfcp_erp_adisc - send ADISC ELS command |
298 | * @adapter: adapter structure | 298 | * @port: port structure |
299 | * @d_id: d_id of port where ADISC is sent to | ||
300 | */ | 299 | */ |
301 | int | 300 | int |
302 | zfcp_erp_adisc(struct zfcp_adapter *adapter, fc_id_t d_id) | 301 | zfcp_erp_adisc(struct zfcp_port *port) |
303 | { | 302 | { |
303 | struct zfcp_adapter *adapter = port->adapter; | ||
304 | struct zfcp_send_els *send_els; | 304 | struct zfcp_send_els *send_els; |
305 | struct zfcp_ls_adisc *adisc; | 305 | struct zfcp_ls_adisc *adisc; |
306 | void *address = NULL; | 306 | void *address = NULL; |
@@ -332,7 +332,8 @@ zfcp_erp_adisc(struct zfcp_adapter *adapter, fc_id_t d_id) | |||
332 | send_els->req_count = send_els->resp_count = 1; | 332 | send_els->req_count = send_els->resp_count = 1; |
333 | 333 | ||
334 | send_els->adapter = adapter; | 334 | send_els->adapter = adapter; |
335 | send_els->d_id = d_id; | 335 | send_els->port = port; |
336 | send_els->d_id = port->d_id; | ||
336 | send_els->handler = zfcp_erp_adisc_handler; | 337 | send_els->handler = zfcp_erp_adisc_handler; |
337 | send_els->handler_data = (unsigned long) send_els; | 338 | send_els->handler_data = (unsigned long) send_els; |
338 | 339 | ||
@@ -350,7 +351,7 @@ zfcp_erp_adisc(struct zfcp_adapter *adapter, fc_id_t d_id) | |||
350 | ZFCP_LOG_INFO("ADISC request from s_id 0x%08x to d_id 0x%08x " | 351 | ZFCP_LOG_INFO("ADISC request from s_id 0x%08x to d_id 0x%08x " |
351 | "(wwpn=0x%016Lx, wwnn=0x%016Lx, " | 352 | "(wwpn=0x%016Lx, wwnn=0x%016Lx, " |
352 | "hard_nport_id=0x%08x, nport_id=0x%08x)\n", | 353 | "hard_nport_id=0x%08x, nport_id=0x%08x)\n", |
353 | adapter->s_id, d_id, (wwn_t) adisc->wwpn, | 354 | adapter->s_id, send_els->d_id, (wwn_t) adisc->wwpn, |
354 | (wwn_t) adisc->wwnn, adisc->hard_nport_id, | 355 | (wwn_t) adisc->wwnn, adisc->hard_nport_id, |
355 | adisc->nport_id); | 356 | adisc->nport_id); |
356 | 357 | ||
@@ -367,7 +368,7 @@ zfcp_erp_adisc(struct zfcp_adapter *adapter, fc_id_t d_id) | |||
367 | retval = zfcp_fsf_send_els(send_els); | 368 | retval = zfcp_fsf_send_els(send_els); |
368 | if (retval != 0) { | 369 | if (retval != 0) { |
369 | ZFCP_LOG_NORMAL("error: initiation of Send ELS failed for port " | 370 | ZFCP_LOG_NORMAL("error: initiation of Send ELS failed for port " |
370 | "0x%08x on adapter %s\n", d_id, | 371 | "0x%08x on adapter %s\n", send_els->d_id, |
371 | zfcp_get_busid_by_adapter(adapter)); | 372 | zfcp_get_busid_by_adapter(adapter)); |
372 | del_timer(send_els->timer); | 373 | del_timer(send_els->timer); |
373 | goto freemem; | 374 | goto freemem; |
@@ -411,14 +412,9 @@ zfcp_erp_adisc_handler(unsigned long data) | |||
411 | del_timer(send_els->timer); | 412 | del_timer(send_els->timer); |
412 | 413 | ||
413 | adapter = send_els->adapter; | 414 | adapter = send_els->adapter; |
415 | port = send_els->port; | ||
414 | d_id = send_els->d_id; | 416 | d_id = send_els->d_id; |
415 | 417 | ||
416 | read_lock(&zfcp_data.config_lock); | ||
417 | port = zfcp_get_port_by_did(send_els->adapter, send_els->d_id); | ||
418 | read_unlock(&zfcp_data.config_lock); | ||
419 | |||
420 | BUG_ON(port == NULL); | ||
421 | |||
422 | /* request rejected or timed out */ | 418 | /* request rejected or timed out */ |
423 | if (send_els->status != 0) { | 419 | if (send_els->status != 0) { |
424 | ZFCP_LOG_NORMAL("ELS request rejected/timed out, " | 420 | ZFCP_LOG_NORMAL("ELS request rejected/timed out, " |
@@ -482,7 +478,7 @@ zfcp_test_link(struct zfcp_port *port) | |||
482 | int retval; | 478 | int retval; |
483 | 479 | ||
484 | zfcp_port_get(port); | 480 | zfcp_port_get(port); |
485 | retval = zfcp_erp_adisc(port->adapter, port->d_id); | 481 | retval = zfcp_erp_adisc(port); |
486 | if (retval != 0) { | 482 | if (retval != 0) { |
487 | zfcp_port_put(port); | 483 | zfcp_port_put(port); |
488 | ZFCP_LOG_NORMAL("reopen needed for port 0x%016Lx " | 484 | ZFCP_LOG_NORMAL("reopen needed for port 0x%016Lx " |
@@ -895,7 +891,7 @@ zfcp_erp_strategy_check_fsfreq(struct zfcp_erp_action *erp_action) | |||
895 | 891 | ||
896 | if (erp_action->fsf_req) { | 892 | if (erp_action->fsf_req) { |
897 | /* take lock to ensure that request is not being deleted meanwhile */ | 893 | /* take lock to ensure that request is not being deleted meanwhile */ |
898 | write_lock(&adapter->fsf_req_list_lock); | 894 | spin_lock(&adapter->fsf_req_list_lock); |
899 | /* check whether fsf req does still exist */ | 895 | /* check whether fsf req does still exist */ |
900 | list_for_each_entry(fsf_req, &adapter->fsf_req_list_head, list) | 896 | list_for_each_entry(fsf_req, &adapter->fsf_req_list_head, list) |
901 | if (fsf_req == erp_action->fsf_req) | 897 | if (fsf_req == erp_action->fsf_req) |
@@ -938,7 +934,7 @@ zfcp_erp_strategy_check_fsfreq(struct zfcp_erp_action *erp_action) | |||
938 | */ | 934 | */ |
939 | erp_action->fsf_req = NULL; | 935 | erp_action->fsf_req = NULL; |
940 | } | 936 | } |
941 | write_unlock(&adapter->fsf_req_list_lock); | 937 | spin_unlock(&adapter->fsf_req_list_lock); |
942 | } else | 938 | } else |
943 | debug_text_event(adapter->erp_dbf, 3, "a_ca_noreq"); | 939 | debug_text_event(adapter->erp_dbf, 3, "a_ca_noreq"); |
944 | 940 | ||
@@ -2286,12 +2282,12 @@ zfcp_erp_adapter_strategy_open_fsf_xconfig(struct zfcp_erp_action *erp_action) | |||
2286 | { | 2282 | { |
2287 | int retval = ZFCP_ERP_SUCCEEDED; | 2283 | int retval = ZFCP_ERP_SUCCEEDED; |
2288 | int retries; | 2284 | int retries; |
2285 | int sleep = ZFCP_EXCHANGE_CONFIG_DATA_FIRST_SLEEP; | ||
2289 | struct zfcp_adapter *adapter = erp_action->adapter; | 2286 | struct zfcp_adapter *adapter = erp_action->adapter; |
2290 | 2287 | ||
2291 | atomic_clear_mask(ZFCP_STATUS_ADAPTER_XCONFIG_OK, &adapter->status); | 2288 | atomic_clear_mask(ZFCP_STATUS_ADAPTER_XCONFIG_OK, &adapter->status); |
2292 | retries = ZFCP_EXCHANGE_CONFIG_DATA_RETRIES; | ||
2293 | 2289 | ||
2294 | do { | 2290 | for (retries = ZFCP_EXCHANGE_CONFIG_DATA_RETRIES; retries; retries--) { |
2295 | atomic_clear_mask(ZFCP_STATUS_ADAPTER_HOST_CON_INIT, | 2291 | atomic_clear_mask(ZFCP_STATUS_ADAPTER_HOST_CON_INIT, |
2296 | &adapter->status); | 2292 | &adapter->status); |
2297 | ZFCP_LOG_DEBUG("Doing exchange config data\n"); | 2293 | ZFCP_LOG_DEBUG("Doing exchange config data\n"); |
@@ -2329,16 +2325,17 @@ zfcp_erp_adapter_strategy_open_fsf_xconfig(struct zfcp_erp_action *erp_action) | |||
2329 | zfcp_get_busid_by_adapter(adapter)); | 2325 | zfcp_get_busid_by_adapter(adapter)); |
2330 | break; | 2326 | break; |
2331 | } | 2327 | } |
2332 | if (atomic_test_mask(ZFCP_STATUS_ADAPTER_HOST_CON_INIT, | 2328 | |
2333 | &adapter->status)) { | 2329 | if (!atomic_test_mask(ZFCP_STATUS_ADAPTER_HOST_CON_INIT, |
2334 | ZFCP_LOG_DEBUG("host connection still initialising... " | 2330 | &adapter->status)) |
2335 | "waiting and retrying...\n"); | 2331 | break; |
2336 | /* sleep a little bit before retry */ | 2332 | |
2337 | msleep(jiffies_to_msecs(ZFCP_EXCHANGE_CONFIG_DATA_SLEEP)); | 2333 | ZFCP_LOG_DEBUG("host connection still initialising... " |
2338 | } | 2334 | "waiting and retrying...\n"); |
2339 | } while ((retries--) && | 2335 | /* sleep a little bit before retry */ |
2340 | atomic_test_mask(ZFCP_STATUS_ADAPTER_HOST_CON_INIT, | 2336 | msleep(jiffies_to_msecs(sleep)); |
2341 | &adapter->status)); | 2337 | sleep *= 2; |
2338 | } | ||
2342 | 2339 | ||
2343 | if (!atomic_test_mask(ZFCP_STATUS_ADAPTER_XCONFIG_OK, | 2340 | if (!atomic_test_mask(ZFCP_STATUS_ADAPTER_XCONFIG_OK, |
2344 | &adapter->status)) { | 2341 | &adapter->status)) { |
@@ -3485,6 +3482,45 @@ zfcp_erp_action_to_ready(struct zfcp_erp_action *erp_action) | |||
3485 | } | 3482 | } |
3486 | 3483 | ||
3487 | /* | 3484 | /* |
3485 | * function: zfcp_erp_port_boxed | ||
3486 | * | ||
3487 | * purpose: | ||
3488 | */ | ||
3489 | void | ||
3490 | zfcp_erp_port_boxed(struct zfcp_port *port) | ||
3491 | { | ||
3492 | struct zfcp_adapter *adapter = port->adapter; | ||
3493 | unsigned long flags; | ||
3494 | |||
3495 | debug_text_event(adapter->erp_dbf, 3, "p_access_boxed"); | ||
3496 | debug_event(adapter->erp_dbf, 3, &port->wwpn, sizeof(wwn_t)); | ||
3497 | read_lock_irqsave(&zfcp_data.config_lock, flags); | ||
3498 | zfcp_erp_modify_port_status(port, | ||
3499 | ZFCP_STATUS_COMMON_ACCESS_BOXED, | ||
3500 | ZFCP_SET); | ||
3501 | read_unlock_irqrestore(&zfcp_data.config_lock, flags); | ||
3502 | zfcp_erp_port_reopen(port, ZFCP_STATUS_COMMON_ERP_FAILED); | ||
3503 | } | ||
3504 | |||
3505 | /* | ||
3506 | * function: zfcp_erp_unit_boxed | ||
3507 | * | ||
3508 | * purpose: | ||
3509 | */ | ||
3510 | void | ||
3511 | zfcp_erp_unit_boxed(struct zfcp_unit *unit) | ||
3512 | { | ||
3513 | struct zfcp_adapter *adapter = unit->port->adapter; | ||
3514 | |||
3515 | debug_text_event(adapter->erp_dbf, 3, "u_access_boxed"); | ||
3516 | debug_event(adapter->erp_dbf, 3, &unit->fcp_lun, sizeof(fcp_lun_t)); | ||
3517 | zfcp_erp_modify_unit_status(unit, | ||
3518 | ZFCP_STATUS_COMMON_ACCESS_BOXED, | ||
3519 | ZFCP_SET); | ||
3520 | zfcp_erp_unit_reopen(unit, ZFCP_STATUS_COMMON_ERP_FAILED); | ||
3521 | } | ||
3522 | |||
3523 | /* | ||
3488 | * function: zfcp_erp_port_access_denied | 3524 | * function: zfcp_erp_port_access_denied |
3489 | * | 3525 | * |
3490 | * purpose: | 3526 | * purpose: |
@@ -3495,11 +3531,13 @@ zfcp_erp_port_access_denied(struct zfcp_port *port) | |||
3495 | struct zfcp_adapter *adapter = port->adapter; | 3531 | struct zfcp_adapter *adapter = port->adapter; |
3496 | unsigned long flags; | 3532 | unsigned long flags; |
3497 | 3533 | ||
3498 | debug_text_event(adapter->erp_dbf, 3, "p_access_block"); | 3534 | debug_text_event(adapter->erp_dbf, 3, "p_access_denied"); |
3499 | debug_event(adapter->erp_dbf, 3, &port->wwpn, sizeof(wwn_t)); | 3535 | debug_event(adapter->erp_dbf, 3, &port->wwpn, sizeof(wwn_t)); |
3500 | read_lock_irqsave(&zfcp_data.config_lock, flags); | 3536 | read_lock_irqsave(&zfcp_data.config_lock, flags); |
3501 | zfcp_erp_modify_port_status(port, ZFCP_STATUS_COMMON_ERP_FAILED | | 3537 | zfcp_erp_modify_port_status(port, |
3502 | ZFCP_STATUS_COMMON_ACCESS_DENIED, ZFCP_SET); | 3538 | ZFCP_STATUS_COMMON_ERP_FAILED | |
3539 | ZFCP_STATUS_COMMON_ACCESS_DENIED, | ||
3540 | ZFCP_SET); | ||
3503 | read_unlock_irqrestore(&zfcp_data.config_lock, flags); | 3541 | read_unlock_irqrestore(&zfcp_data.config_lock, flags); |
3504 | } | 3542 | } |
3505 | 3543 | ||
@@ -3513,10 +3551,12 @@ zfcp_erp_unit_access_denied(struct zfcp_unit *unit) | |||
3513 | { | 3551 | { |
3514 | struct zfcp_adapter *adapter = unit->port->adapter; | 3552 | struct zfcp_adapter *adapter = unit->port->adapter; |
3515 | 3553 | ||
3516 | debug_text_event(adapter->erp_dbf, 3, "u_access_block"); | 3554 | debug_text_event(adapter->erp_dbf, 3, "u_access_denied"); |
3517 | debug_event(adapter->erp_dbf, 3, &unit->fcp_lun, sizeof(fcp_lun_t)); | 3555 | debug_event(adapter->erp_dbf, 3, &unit->fcp_lun, sizeof(fcp_lun_t)); |
3518 | zfcp_erp_modify_unit_status(unit, ZFCP_STATUS_COMMON_ERP_FAILED | | 3556 | zfcp_erp_modify_unit_status(unit, |
3519 | ZFCP_STATUS_COMMON_ACCESS_DENIED, ZFCP_SET); | 3557 | ZFCP_STATUS_COMMON_ERP_FAILED | |
3558 | ZFCP_STATUS_COMMON_ACCESS_DENIED, | ||
3559 | ZFCP_SET); | ||
3520 | } | 3560 | } |
3521 | 3561 | ||
3522 | /* | 3562 | /* |
@@ -3530,7 +3570,7 @@ zfcp_erp_adapter_access_changed(struct zfcp_adapter *adapter) | |||
3530 | struct zfcp_port *port; | 3570 | struct zfcp_port *port; |
3531 | unsigned long flags; | 3571 | unsigned long flags; |
3532 | 3572 | ||
3533 | debug_text_event(adapter->erp_dbf, 3, "a_access_unblock"); | 3573 | debug_text_event(adapter->erp_dbf, 3, "a_access_recover"); |
3534 | debug_event(adapter->erp_dbf, 3, &adapter->name, 8); | 3574 | debug_event(adapter->erp_dbf, 3, &adapter->name, 8); |
3535 | 3575 | ||
3536 | read_lock_irqsave(&zfcp_data.config_lock, flags); | 3576 | read_lock_irqsave(&zfcp_data.config_lock, flags); |
@@ -3553,10 +3593,12 @@ zfcp_erp_port_access_changed(struct zfcp_port *port) | |||
3553 | struct zfcp_adapter *adapter = port->adapter; | 3593 | struct zfcp_adapter *adapter = port->adapter; |
3554 | struct zfcp_unit *unit; | 3594 | struct zfcp_unit *unit; |
3555 | 3595 | ||
3556 | debug_text_event(adapter->erp_dbf, 3, "p_access_unblock"); | 3596 | debug_text_event(adapter->erp_dbf, 3, "p_access_recover"); |
3557 | debug_event(adapter->erp_dbf, 3, &port->wwpn, sizeof(wwn_t)); | 3597 | debug_event(adapter->erp_dbf, 3, &port->wwpn, sizeof(wwn_t)); |
3558 | 3598 | ||
3559 | if (!atomic_test_mask(ZFCP_STATUS_COMMON_ACCESS_DENIED, | 3599 | if (!atomic_test_mask(ZFCP_STATUS_COMMON_ACCESS_DENIED, |
3600 | &port->status) && | ||
3601 | !atomic_test_mask(ZFCP_STATUS_COMMON_ACCESS_BOXED, | ||
3560 | &port->status)) { | 3602 | &port->status)) { |
3561 | if (!atomic_test_mask(ZFCP_STATUS_PORT_WKA, &port->status)) | 3603 | if (!atomic_test_mask(ZFCP_STATUS_PORT_WKA, &port->status)) |
3562 | list_for_each_entry(unit, &port->unit_list_head, list) | 3604 | list_for_each_entry(unit, &port->unit_list_head, list) |
@@ -3583,10 +3625,13 @@ zfcp_erp_unit_access_changed(struct zfcp_unit *unit) | |||
3583 | { | 3625 | { |
3584 | struct zfcp_adapter *adapter = unit->port->adapter; | 3626 | struct zfcp_adapter *adapter = unit->port->adapter; |
3585 | 3627 | ||
3586 | debug_text_event(adapter->erp_dbf, 3, "u_access_unblock"); | 3628 | debug_text_event(adapter->erp_dbf, 3, "u_access_recover"); |
3587 | debug_event(adapter->erp_dbf, 3, &unit->fcp_lun, sizeof(fcp_lun_t)); | 3629 | debug_event(adapter->erp_dbf, 3, &unit->fcp_lun, sizeof(fcp_lun_t)); |
3588 | 3630 | ||
3589 | if (!atomic_test_mask(ZFCP_STATUS_COMMON_ACCESS_DENIED, &unit->status)) | 3631 | if (!atomic_test_mask(ZFCP_STATUS_COMMON_ACCESS_DENIED, |
3632 | &unit->status) && | ||
3633 | !atomic_test_mask(ZFCP_STATUS_COMMON_ACCESS_BOXED, | ||
3634 | &unit->status)) | ||
3590 | return; | 3635 | return; |
3591 | 3636 | ||
3592 | ZFCP_LOG_NORMAL("reopen of unit 0x%016Lx on port 0x%016Lx " | 3637 | ZFCP_LOG_NORMAL("reopen of unit 0x%016Lx on port 0x%016Lx " |
diff --git a/drivers/s390/scsi/zfcp_ext.h b/drivers/s390/scsi/zfcp_ext.h index d5fd43352071..42df7e57eeae 100644 --- a/drivers/s390/scsi/zfcp_ext.h +++ b/drivers/s390/scsi/zfcp_ext.h | |||
@@ -116,7 +116,7 @@ extern int zfcp_fsf_send_fcp_command_task(struct zfcp_adapter *, | |||
116 | struct timer_list*, int); | 116 | struct timer_list*, int); |
117 | extern int zfcp_fsf_req_complete(struct zfcp_fsf_req *); | 117 | extern int zfcp_fsf_req_complete(struct zfcp_fsf_req *); |
118 | extern void zfcp_fsf_incoming_els(struct zfcp_fsf_req *); | 118 | extern void zfcp_fsf_incoming_els(struct zfcp_fsf_req *); |
119 | extern void zfcp_fsf_req_cleanup(struct zfcp_fsf_req *); | 119 | extern void zfcp_fsf_req_free(struct zfcp_fsf_req *); |
120 | extern struct zfcp_fsf_req *zfcp_fsf_send_fcp_command_task_management( | 120 | extern struct zfcp_fsf_req *zfcp_fsf_send_fcp_command_task_management( |
121 | struct zfcp_adapter *, struct zfcp_unit *, u8, int); | 121 | struct zfcp_adapter *, struct zfcp_unit *, u8, int); |
122 | extern struct zfcp_fsf_req *zfcp_fsf_abort_fcp_command( | 122 | extern struct zfcp_fsf_req *zfcp_fsf_abort_fcp_command( |
@@ -171,6 +171,8 @@ extern int zfcp_erp_async_handler(struct zfcp_erp_action *, unsigned long); | |||
171 | 171 | ||
172 | extern int zfcp_test_link(struct zfcp_port *); | 172 | extern int zfcp_test_link(struct zfcp_port *); |
173 | 173 | ||
174 | extern void zfcp_erp_port_boxed(struct zfcp_port *); | ||
175 | extern void zfcp_erp_unit_boxed(struct zfcp_unit *); | ||
174 | extern void zfcp_erp_port_access_denied(struct zfcp_port *); | 176 | extern void zfcp_erp_port_access_denied(struct zfcp_port *); |
175 | extern void zfcp_erp_unit_access_denied(struct zfcp_unit *); | 177 | extern void zfcp_erp_unit_access_denied(struct zfcp_unit *); |
176 | extern void zfcp_erp_adapter_access_changed(struct zfcp_adapter *); | 178 | extern void zfcp_erp_adapter_access_changed(struct zfcp_adapter *); |
diff --git a/drivers/s390/scsi/zfcp_fsf.c b/drivers/s390/scsi/zfcp_fsf.c index 148b11c822bf..0d9f20edc490 100644 --- a/drivers/s390/scsi/zfcp_fsf.c +++ b/drivers/s390/scsi/zfcp_fsf.c | |||
@@ -61,7 +61,6 @@ static int zfcp_fsf_fsfstatus_eval(struct zfcp_fsf_req *); | |||
61 | static int zfcp_fsf_fsfstatus_qual_eval(struct zfcp_fsf_req *); | 61 | static int zfcp_fsf_fsfstatus_qual_eval(struct zfcp_fsf_req *); |
62 | static int zfcp_fsf_req_dispatch(struct zfcp_fsf_req *); | 62 | static int zfcp_fsf_req_dispatch(struct zfcp_fsf_req *); |
63 | static void zfcp_fsf_req_dismiss(struct zfcp_fsf_req *); | 63 | static void zfcp_fsf_req_dismiss(struct zfcp_fsf_req *); |
64 | static void zfcp_fsf_req_free(struct zfcp_fsf_req *); | ||
65 | 64 | ||
66 | /* association between FSF command and FSF QTCB type */ | 65 | /* association between FSF command and FSF QTCB type */ |
67 | static u32 fsf_qtcb_type[] = { | 66 | static u32 fsf_qtcb_type[] = { |
@@ -149,13 +148,13 @@ zfcp_fsf_req_alloc(mempool_t *pool, int req_flags) | |||
149 | * | 148 | * |
150 | * locks: none | 149 | * locks: none |
151 | */ | 150 | */ |
152 | static void | 151 | void |
153 | zfcp_fsf_req_free(struct zfcp_fsf_req *fsf_req) | 152 | zfcp_fsf_req_free(struct zfcp_fsf_req *fsf_req) |
154 | { | 153 | { |
155 | if (likely(fsf_req->pool != NULL)) | 154 | if (likely(fsf_req->pool != NULL)) |
156 | mempool_free(fsf_req, fsf_req->pool); | 155 | mempool_free(fsf_req, fsf_req->pool); |
157 | else | 156 | else |
158 | kfree(fsf_req); | 157 | kfree(fsf_req); |
159 | } | 158 | } |
160 | 159 | ||
161 | /* | 160 | /* |
@@ -170,30 +169,21 @@ zfcp_fsf_req_free(struct zfcp_fsf_req *fsf_req) | |||
170 | int | 169 | int |
171 | zfcp_fsf_req_dismiss_all(struct zfcp_adapter *adapter) | 170 | zfcp_fsf_req_dismiss_all(struct zfcp_adapter *adapter) |
172 | { | 171 | { |
173 | int retval = 0; | ||
174 | struct zfcp_fsf_req *fsf_req, *tmp; | 172 | struct zfcp_fsf_req *fsf_req, *tmp; |
173 | unsigned long flags; | ||
174 | LIST_HEAD(remove_queue); | ||
175 | 175 | ||
176 | list_for_each_entry_safe(fsf_req, tmp, &adapter->fsf_req_list_head, | 176 | spin_lock_irqsave(&adapter->fsf_req_list_lock, flags); |
177 | list) | 177 | list_splice_init(&adapter->fsf_req_list_head, &remove_queue); |
178 | zfcp_fsf_req_dismiss(fsf_req); | 178 | atomic_set(&adapter->fsf_reqs_active, 0); |
179 | /* wait_event_timeout? */ | 179 | spin_unlock_irqrestore(&adapter->fsf_req_list_lock, flags); |
180 | while (!list_empty(&adapter->fsf_req_list_head)) { | ||
181 | ZFCP_LOG_DEBUG("fsf req list of adapter %s not yet empty\n", | ||
182 | zfcp_get_busid_by_adapter(adapter)); | ||
183 | /* wait for woken intiators to clean up their requests */ | ||
184 | msleep(jiffies_to_msecs(ZFCP_FSFREQ_CLEANUP_TIMEOUT)); | ||
185 | } | ||
186 | 180 | ||
187 | /* consistency check */ | 181 | list_for_each_entry_safe(fsf_req, tmp, &remove_queue, list) { |
188 | if (atomic_read(&adapter->fsf_reqs_active)) { | 182 | list_del(&fsf_req->list); |
189 | ZFCP_LOG_NORMAL("bug: There are still %d FSF requests pending " | 183 | zfcp_fsf_req_dismiss(fsf_req); |
190 | "on adapter %s after cleanup.\n", | ||
191 | atomic_read(&adapter->fsf_reqs_active), | ||
192 | zfcp_get_busid_by_adapter(adapter)); | ||
193 | atomic_set(&adapter->fsf_reqs_active, 0); | ||
194 | } | 184 | } |
195 | 185 | ||
196 | return retval; | 186 | return 0; |
197 | } | 187 | } |
198 | 188 | ||
199 | /* | 189 | /* |
@@ -226,10 +216,6 @@ zfcp_fsf_req_complete(struct zfcp_fsf_req *fsf_req) | |||
226 | { | 216 | { |
227 | int retval = 0; | 217 | int retval = 0; |
228 | int cleanup; | 218 | int cleanup; |
229 | struct zfcp_adapter *adapter = fsf_req->adapter; | ||
230 | |||
231 | /* do some statistics */ | ||
232 | atomic_dec(&adapter->fsf_reqs_active); | ||
233 | 219 | ||
234 | if (unlikely(fsf_req->fsf_command == FSF_QTCB_UNSOLICITED_STATUS)) { | 220 | if (unlikely(fsf_req->fsf_command == FSF_QTCB_UNSOLICITED_STATUS)) { |
235 | ZFCP_LOG_DEBUG("Status read response received\n"); | 221 | ZFCP_LOG_DEBUG("Status read response received\n"); |
@@ -260,7 +246,7 @@ zfcp_fsf_req_complete(struct zfcp_fsf_req *fsf_req) | |||
260 | * lock must not be held here since it will be | 246 | * lock must not be held here since it will be |
261 | * grabed by the called routine, too | 247 | * grabed by the called routine, too |
262 | */ | 248 | */ |
263 | zfcp_fsf_req_cleanup(fsf_req); | 249 | zfcp_fsf_req_free(fsf_req); |
264 | } else { | 250 | } else { |
265 | /* notify initiator waiting for the requests completion */ | 251 | /* notify initiator waiting for the requests completion */ |
266 | ZFCP_LOG_TRACE("waking initiator of FSF request %p\n",fsf_req); | 252 | ZFCP_LOG_TRACE("waking initiator of FSF request %p\n",fsf_req); |
@@ -346,15 +332,10 @@ zfcp_fsf_protstatus_eval(struct zfcp_fsf_req *fsf_req) | |||
346 | switch (fsf_req->qtcb->prefix.prot_status) { | 332 | switch (fsf_req->qtcb->prefix.prot_status) { |
347 | 333 | ||
348 | case FSF_PROT_GOOD: | 334 | case FSF_PROT_GOOD: |
349 | ZFCP_LOG_TRACE("FSF_PROT_GOOD\n"); | ||
350 | break; | ||
351 | |||
352 | case FSF_PROT_FSF_STATUS_PRESENTED: | 335 | case FSF_PROT_FSF_STATUS_PRESENTED: |
353 | ZFCP_LOG_TRACE("FSF_PROT_FSF_STATUS_PRESENTED\n"); | ||
354 | break; | 336 | break; |
355 | 337 | ||
356 | case FSF_PROT_QTCB_VERSION_ERROR: | 338 | case FSF_PROT_QTCB_VERSION_ERROR: |
357 | ZFCP_LOG_FLAGS(0, "FSF_PROT_QTCB_VERSION_ERROR\n"); | ||
358 | ZFCP_LOG_NORMAL("error: The adapter %s contains " | 339 | ZFCP_LOG_NORMAL("error: The adapter %s contains " |
359 | "microcode of version 0x%x, the device driver " | 340 | "microcode of version 0x%x, the device driver " |
360 | "only supports 0x%x. Aborting.\n", | 341 | "only supports 0x%x. Aborting.\n", |
@@ -371,7 +352,6 @@ zfcp_fsf_protstatus_eval(struct zfcp_fsf_req *fsf_req) | |||
371 | break; | 352 | break; |
372 | 353 | ||
373 | case FSF_PROT_SEQ_NUMB_ERROR: | 354 | case FSF_PROT_SEQ_NUMB_ERROR: |
374 | ZFCP_LOG_FLAGS(0, "FSF_PROT_SEQ_NUMB_ERROR\n"); | ||
375 | ZFCP_LOG_NORMAL("bug: Sequence number mismatch between " | 355 | ZFCP_LOG_NORMAL("bug: Sequence number mismatch between " |
376 | "driver (0x%x) and adapter %s (0x%x). " | 356 | "driver (0x%x) and adapter %s (0x%x). " |
377 | "Restarting all operations on this adapter.\n", | 357 | "Restarting all operations on this adapter.\n", |
@@ -390,7 +370,6 @@ zfcp_fsf_protstatus_eval(struct zfcp_fsf_req *fsf_req) | |||
390 | break; | 370 | break; |
391 | 371 | ||
392 | case FSF_PROT_UNSUPP_QTCB_TYPE: | 372 | case FSF_PROT_UNSUPP_QTCB_TYPE: |
393 | ZFCP_LOG_FLAGS(0, "FSF_PROT_UNSUP_QTCB_TYPE\n"); | ||
394 | ZFCP_LOG_NORMAL("error: Packet header type used by the " | 373 | ZFCP_LOG_NORMAL("error: Packet header type used by the " |
395 | "device driver is incompatible with " | 374 | "device driver is incompatible with " |
396 | "that used on adapter %s. " | 375 | "that used on adapter %s. " |
@@ -405,7 +384,6 @@ zfcp_fsf_protstatus_eval(struct zfcp_fsf_req *fsf_req) | |||
405 | break; | 384 | break; |
406 | 385 | ||
407 | case FSF_PROT_HOST_CONNECTION_INITIALIZING: | 386 | case FSF_PROT_HOST_CONNECTION_INITIALIZING: |
408 | ZFCP_LOG_FLAGS(1, "FSF_PROT_HOST_CONNECTION_INITIALIZING\n"); | ||
409 | zfcp_cmd_dbf_event_fsf("hconinit", fsf_req, | 387 | zfcp_cmd_dbf_event_fsf("hconinit", fsf_req, |
410 | &fsf_req->qtcb->prefix.prot_status_qual, | 388 | &fsf_req->qtcb->prefix.prot_status_qual, |
411 | sizeof (union fsf_prot_status_qual)); | 389 | sizeof (union fsf_prot_status_qual)); |
@@ -416,7 +394,6 @@ zfcp_fsf_protstatus_eval(struct zfcp_fsf_req *fsf_req) | |||
416 | break; | 394 | break; |
417 | 395 | ||
418 | case FSF_PROT_DUPLICATE_REQUEST_ID: | 396 | case FSF_PROT_DUPLICATE_REQUEST_ID: |
419 | ZFCP_LOG_FLAGS(0, "FSF_PROT_DUPLICATE_REQUEST_IDS\n"); | ||
420 | if (fsf_req->qtcb) { | 397 | if (fsf_req->qtcb) { |
421 | ZFCP_LOG_NORMAL("bug: The request identifier 0x%Lx " | 398 | ZFCP_LOG_NORMAL("bug: The request identifier 0x%Lx " |
422 | "to the adapter %s is ambiguous. " | 399 | "to the adapter %s is ambiguous. " |
@@ -445,7 +422,6 @@ zfcp_fsf_protstatus_eval(struct zfcp_fsf_req *fsf_req) | |||
445 | break; | 422 | break; |
446 | 423 | ||
447 | case FSF_PROT_LINK_DOWN: | 424 | case FSF_PROT_LINK_DOWN: |
448 | ZFCP_LOG_FLAGS(1, "FSF_PROT_LINK_DOWN\n"); | ||
449 | /* | 425 | /* |
450 | * 'test and set' is not atomic here - | 426 | * 'test and set' is not atomic here - |
451 | * it's ok as long as calls to our response queue handler | 427 | * it's ok as long as calls to our response queue handler |
@@ -502,13 +478,11 @@ zfcp_fsf_protstatus_eval(struct zfcp_fsf_req *fsf_req) | |||
502 | ZFCP_STATUS_COMMON_ERP_FAILED, | 478 | ZFCP_STATUS_COMMON_ERP_FAILED, |
503 | &adapter->status); | 479 | &adapter->status); |
504 | zfcp_erp_adapter_reopen(adapter, 0); | 480 | zfcp_erp_adapter_reopen(adapter, 0); |
505 | debug_text_event(adapter->erp_dbf, 1, "prot_link_down"); | ||
506 | } | 481 | } |
507 | fsf_req->status |= ZFCP_STATUS_FSFREQ_ERROR; | 482 | fsf_req->status |= ZFCP_STATUS_FSFREQ_ERROR; |
508 | break; | 483 | break; |
509 | 484 | ||
510 | case FSF_PROT_REEST_QUEUE: | 485 | case FSF_PROT_REEST_QUEUE: |
511 | ZFCP_LOG_FLAGS(1, "FSF_PROT_REEST_QUEUE\n"); | ||
512 | debug_text_event(adapter->erp_dbf, 1, "prot_reest_queue"); | 486 | debug_text_event(adapter->erp_dbf, 1, "prot_reest_queue"); |
513 | ZFCP_LOG_INFO("The local link to adapter with " | 487 | ZFCP_LOG_INFO("The local link to adapter with " |
514 | "%s was re-plugged. " | 488 | "%s was re-plugged. " |
@@ -528,7 +502,6 @@ zfcp_fsf_protstatus_eval(struct zfcp_fsf_req *fsf_req) | |||
528 | break; | 502 | break; |
529 | 503 | ||
530 | case FSF_PROT_ERROR_STATE: | 504 | case FSF_PROT_ERROR_STATE: |
531 | ZFCP_LOG_FLAGS(0, "FSF_PROT_ERROR_STATE\n"); | ||
532 | ZFCP_LOG_NORMAL("error: The adapter %s " | 505 | ZFCP_LOG_NORMAL("error: The adapter %s " |
533 | "has entered the error state. " | 506 | "has entered the error state. " |
534 | "Restarting all operations on this " | 507 | "Restarting all operations on this " |
@@ -589,7 +562,6 @@ zfcp_fsf_fsfstatus_eval(struct zfcp_fsf_req *fsf_req) | |||
589 | /* evaluate FSF Status */ | 562 | /* evaluate FSF Status */ |
590 | switch (fsf_req->qtcb->header.fsf_status) { | 563 | switch (fsf_req->qtcb->header.fsf_status) { |
591 | case FSF_UNKNOWN_COMMAND: | 564 | case FSF_UNKNOWN_COMMAND: |
592 | ZFCP_LOG_FLAGS(0, "FSF_UNKNOWN_COMMAND\n"); | ||
593 | ZFCP_LOG_NORMAL("bug: Command issued by the device driver is " | 565 | ZFCP_LOG_NORMAL("bug: Command issued by the device driver is " |
594 | "not known by the adapter %s " | 566 | "not known by the adapter %s " |
595 | "Stopping all operations on this adapter. " | 567 | "Stopping all operations on this adapter. " |
@@ -606,14 +578,12 @@ zfcp_fsf_fsfstatus_eval(struct zfcp_fsf_req *fsf_req) | |||
606 | break; | 578 | break; |
607 | 579 | ||
608 | case FSF_FCP_RSP_AVAILABLE: | 580 | case FSF_FCP_RSP_AVAILABLE: |
609 | ZFCP_LOG_FLAGS(2, "FSF_FCP_RSP_AVAILABLE\n"); | ||
610 | ZFCP_LOG_DEBUG("FCP Sense data will be presented to the " | 581 | ZFCP_LOG_DEBUG("FCP Sense data will be presented to the " |
611 | "SCSI stack.\n"); | 582 | "SCSI stack.\n"); |
612 | debug_text_event(fsf_req->adapter->erp_dbf, 3, "fsf_s_rsp"); | 583 | debug_text_event(fsf_req->adapter->erp_dbf, 3, "fsf_s_rsp"); |
613 | break; | 584 | break; |
614 | 585 | ||
615 | case FSF_ADAPTER_STATUS_AVAILABLE: | 586 | case FSF_ADAPTER_STATUS_AVAILABLE: |
616 | ZFCP_LOG_FLAGS(2, "FSF_ADAPTER_STATUS_AVAILABLE\n"); | ||
617 | debug_text_event(fsf_req->adapter->erp_dbf, 2, "fsf_s_astatus"); | 587 | debug_text_event(fsf_req->adapter->erp_dbf, 2, "fsf_s_astatus"); |
618 | zfcp_fsf_fsfstatus_qual_eval(fsf_req); | 588 | zfcp_fsf_fsfstatus_qual_eval(fsf_req); |
619 | break; | 589 | break; |
@@ -647,11 +617,9 @@ zfcp_fsf_fsfstatus_qual_eval(struct zfcp_fsf_req *fsf_req) | |||
647 | 617 | ||
648 | switch (fsf_req->qtcb->header.fsf_status_qual.word[0]) { | 618 | switch (fsf_req->qtcb->header.fsf_status_qual.word[0]) { |
649 | case FSF_SQ_FCP_RSP_AVAILABLE: | 619 | case FSF_SQ_FCP_RSP_AVAILABLE: |
650 | ZFCP_LOG_FLAGS(2, "FSF_SQ_FCP_RSP_AVAILABLE\n"); | ||
651 | debug_text_event(fsf_req->adapter->erp_dbf, 4, "fsf_sq_rsp"); | 620 | debug_text_event(fsf_req->adapter->erp_dbf, 4, "fsf_sq_rsp"); |
652 | break; | 621 | break; |
653 | case FSF_SQ_RETRY_IF_POSSIBLE: | 622 | case FSF_SQ_RETRY_IF_POSSIBLE: |
654 | ZFCP_LOG_FLAGS(2, "FSF_SQ_RETRY_IF_POSSIBLE\n"); | ||
655 | /* The SCSI-stack may now issue retries or escalate */ | 623 | /* The SCSI-stack may now issue retries or escalate */ |
656 | debug_text_event(fsf_req->adapter->erp_dbf, 2, "fsf_sq_retry"); | 624 | debug_text_event(fsf_req->adapter->erp_dbf, 2, "fsf_sq_retry"); |
657 | zfcp_cmd_dbf_event_fsf("sqretry", fsf_req, | 625 | zfcp_cmd_dbf_event_fsf("sqretry", fsf_req, |
@@ -660,7 +628,6 @@ zfcp_fsf_fsfstatus_qual_eval(struct zfcp_fsf_req *fsf_req) | |||
660 | fsf_req->status |= ZFCP_STATUS_FSFREQ_ERROR; | 628 | fsf_req->status |= ZFCP_STATUS_FSFREQ_ERROR; |
661 | break; | 629 | break; |
662 | case FSF_SQ_COMMAND_ABORTED: | 630 | case FSF_SQ_COMMAND_ABORTED: |
663 | ZFCP_LOG_FLAGS(2, "FSF_SQ_COMMAND_ABORTED\n"); | ||
664 | /* Carry the aborted state on to upper layer */ | 631 | /* Carry the aborted state on to upper layer */ |
665 | debug_text_event(fsf_req->adapter->erp_dbf, 2, "fsf_sq_abort"); | 632 | debug_text_event(fsf_req->adapter->erp_dbf, 2, "fsf_sq_abort"); |
666 | zfcp_cmd_dbf_event_fsf("sqabort", fsf_req, | 633 | zfcp_cmd_dbf_event_fsf("sqabort", fsf_req, |
@@ -670,7 +637,6 @@ zfcp_fsf_fsfstatus_qual_eval(struct zfcp_fsf_req *fsf_req) | |||
670 | fsf_req->status |= ZFCP_STATUS_FSFREQ_ERROR; | 637 | fsf_req->status |= ZFCP_STATUS_FSFREQ_ERROR; |
671 | break; | 638 | break; |
672 | case FSF_SQ_NO_RECOM: | 639 | case FSF_SQ_NO_RECOM: |
673 | ZFCP_LOG_FLAGS(0, "FSF_SQ_NO_RECOM\n"); | ||
674 | debug_text_exception(fsf_req->adapter->erp_dbf, 0, | 640 | debug_text_exception(fsf_req->adapter->erp_dbf, 0, |
675 | "fsf_sq_no_rec"); | 641 | "fsf_sq_no_rec"); |
676 | ZFCP_LOG_NORMAL("bug: No recommendation could be given for a" | 642 | ZFCP_LOG_NORMAL("bug: No recommendation could be given for a" |
@@ -684,7 +650,6 @@ zfcp_fsf_fsfstatus_qual_eval(struct zfcp_fsf_req *fsf_req) | |||
684 | fsf_req->status |= ZFCP_STATUS_FSFREQ_ERROR; | 650 | fsf_req->status |= ZFCP_STATUS_FSFREQ_ERROR; |
685 | break; | 651 | break; |
686 | case FSF_SQ_ULP_PROGRAMMING_ERROR: | 652 | case FSF_SQ_ULP_PROGRAMMING_ERROR: |
687 | ZFCP_LOG_FLAGS(0, "FSF_SQ_ULP_PROGRAMMING_ERROR\n"); | ||
688 | ZFCP_LOG_NORMAL("error: not enough SBALs for data transfer " | 653 | ZFCP_LOG_NORMAL("error: not enough SBALs for data transfer " |
689 | "(adapter %s)\n", | 654 | "(adapter %s)\n", |
690 | zfcp_get_busid_by_adapter(fsf_req->adapter)); | 655 | zfcp_get_busid_by_adapter(fsf_req->adapter)); |
@@ -740,72 +705,58 @@ zfcp_fsf_req_dispatch(struct zfcp_fsf_req *fsf_req) | |||
740 | switch (fsf_req->fsf_command) { | 705 | switch (fsf_req->fsf_command) { |
741 | 706 | ||
742 | case FSF_QTCB_FCP_CMND: | 707 | case FSF_QTCB_FCP_CMND: |
743 | ZFCP_LOG_FLAGS(3, "FSF_QTCB_FCP_CMND\n"); | ||
744 | zfcp_fsf_send_fcp_command_handler(fsf_req); | 708 | zfcp_fsf_send_fcp_command_handler(fsf_req); |
745 | break; | 709 | break; |
746 | 710 | ||
747 | case FSF_QTCB_ABORT_FCP_CMND: | 711 | case FSF_QTCB_ABORT_FCP_CMND: |
748 | ZFCP_LOG_FLAGS(2, "FSF_QTCB_ABORT_FCP_CMND\n"); | ||
749 | zfcp_fsf_abort_fcp_command_handler(fsf_req); | 712 | zfcp_fsf_abort_fcp_command_handler(fsf_req); |
750 | break; | 713 | break; |
751 | 714 | ||
752 | case FSF_QTCB_SEND_GENERIC: | 715 | case FSF_QTCB_SEND_GENERIC: |
753 | ZFCP_LOG_FLAGS(2, "FSF_QTCB_SEND_GENERIC\n"); | ||
754 | zfcp_fsf_send_ct_handler(fsf_req); | 716 | zfcp_fsf_send_ct_handler(fsf_req); |
755 | break; | 717 | break; |
756 | 718 | ||
757 | case FSF_QTCB_OPEN_PORT_WITH_DID: | 719 | case FSF_QTCB_OPEN_PORT_WITH_DID: |
758 | ZFCP_LOG_FLAGS(2, "FSF_QTCB_OPEN_PORT_WITH_DID\n"); | ||
759 | zfcp_fsf_open_port_handler(fsf_req); | 720 | zfcp_fsf_open_port_handler(fsf_req); |
760 | break; | 721 | break; |
761 | 722 | ||
762 | case FSF_QTCB_OPEN_LUN: | 723 | case FSF_QTCB_OPEN_LUN: |
763 | ZFCP_LOG_FLAGS(2, "FSF_QTCB_OPEN_LUN\n"); | ||
764 | zfcp_fsf_open_unit_handler(fsf_req); | 724 | zfcp_fsf_open_unit_handler(fsf_req); |
765 | break; | 725 | break; |
766 | 726 | ||
767 | case FSF_QTCB_CLOSE_LUN: | 727 | case FSF_QTCB_CLOSE_LUN: |
768 | ZFCP_LOG_FLAGS(2, "FSF_QTCB_CLOSE_LUN\n"); | ||
769 | zfcp_fsf_close_unit_handler(fsf_req); | 728 | zfcp_fsf_close_unit_handler(fsf_req); |
770 | break; | 729 | break; |
771 | 730 | ||
772 | case FSF_QTCB_CLOSE_PORT: | 731 | case FSF_QTCB_CLOSE_PORT: |
773 | ZFCP_LOG_FLAGS(2, "FSF_QTCB_CLOSE_PORT\n"); | ||
774 | zfcp_fsf_close_port_handler(fsf_req); | 732 | zfcp_fsf_close_port_handler(fsf_req); |
775 | break; | 733 | break; |
776 | 734 | ||
777 | case FSF_QTCB_CLOSE_PHYSICAL_PORT: | 735 | case FSF_QTCB_CLOSE_PHYSICAL_PORT: |
778 | ZFCP_LOG_FLAGS(2, "FSF_QTCB_CLOSE_PHYSICAL_PORT\n"); | ||
779 | zfcp_fsf_close_physical_port_handler(fsf_req); | 736 | zfcp_fsf_close_physical_port_handler(fsf_req); |
780 | break; | 737 | break; |
781 | 738 | ||
782 | case FSF_QTCB_EXCHANGE_CONFIG_DATA: | 739 | case FSF_QTCB_EXCHANGE_CONFIG_DATA: |
783 | ZFCP_LOG_FLAGS(2, "FSF_QTCB_EXCHANGE_CONFIG_DATA\n"); | ||
784 | zfcp_fsf_exchange_config_data_handler(fsf_req); | 740 | zfcp_fsf_exchange_config_data_handler(fsf_req); |
785 | break; | 741 | break; |
786 | 742 | ||
787 | case FSF_QTCB_EXCHANGE_PORT_DATA: | 743 | case FSF_QTCB_EXCHANGE_PORT_DATA: |
788 | ZFCP_LOG_FLAGS(2, "FSF_QTCB_EXCHANGE_PORT_DATA\n"); | ||
789 | zfcp_fsf_exchange_port_data_handler(fsf_req); | 744 | zfcp_fsf_exchange_port_data_handler(fsf_req); |
790 | break; | 745 | break; |
791 | 746 | ||
792 | case FSF_QTCB_SEND_ELS: | 747 | case FSF_QTCB_SEND_ELS: |
793 | ZFCP_LOG_FLAGS(2, "FSF_QTCB_SEND_ELS\n"); | ||
794 | zfcp_fsf_send_els_handler(fsf_req); | 748 | zfcp_fsf_send_els_handler(fsf_req); |
795 | break; | 749 | break; |
796 | 750 | ||
797 | case FSF_QTCB_DOWNLOAD_CONTROL_FILE: | 751 | case FSF_QTCB_DOWNLOAD_CONTROL_FILE: |
798 | ZFCP_LOG_FLAGS(2, "FSF_QTCB_DOWNLOAD_CONTROL_FILE\n"); | ||
799 | zfcp_fsf_control_file_handler(fsf_req); | 752 | zfcp_fsf_control_file_handler(fsf_req); |
800 | break; | 753 | break; |
801 | 754 | ||
802 | case FSF_QTCB_UPLOAD_CONTROL_FILE: | 755 | case FSF_QTCB_UPLOAD_CONTROL_FILE: |
803 | ZFCP_LOG_FLAGS(2, "FSF_QTCB_UPLOAD_CONTROL_FILE\n"); | ||
804 | zfcp_fsf_control_file_handler(fsf_req); | 756 | zfcp_fsf_control_file_handler(fsf_req); |
805 | break; | 757 | break; |
806 | 758 | ||
807 | default: | 759 | default: |
808 | ZFCP_LOG_FLAGS(2, "FSF_QTCB_UNKNOWN\n"); | ||
809 | fsf_req->status |= ZFCP_STATUS_FSFREQ_ERROR; | 760 | fsf_req->status |= ZFCP_STATUS_FSFREQ_ERROR; |
810 | ZFCP_LOG_NORMAL("bug: Command issued by the device driver is " | 761 | ZFCP_LOG_NORMAL("bug: Command issued by the device driver is " |
811 | "not supported by the adapter %s\n", | 762 | "not supported by the adapter %s\n", |
@@ -929,13 +880,11 @@ zfcp_fsf_status_read_port_closed(struct zfcp_fsf_req *fsf_req) | |||
929 | switch (status_buffer->status_subtype) { | 880 | switch (status_buffer->status_subtype) { |
930 | 881 | ||
931 | case FSF_STATUS_READ_SUB_CLOSE_PHYS_PORT: | 882 | case FSF_STATUS_READ_SUB_CLOSE_PHYS_PORT: |
932 | ZFCP_LOG_FLAGS(2, "FSF_STATUS_READ_SUB_CLOSE_PHYS_PORT\n"); | ||
933 | debug_text_event(adapter->erp_dbf, 3, "unsol_pc_phys:"); | 883 | debug_text_event(adapter->erp_dbf, 3, "unsol_pc_phys:"); |
934 | zfcp_erp_port_reopen(port, 0); | 884 | zfcp_erp_port_reopen(port, 0); |
935 | break; | 885 | break; |
936 | 886 | ||
937 | case FSF_STATUS_READ_SUB_ERROR_PORT: | 887 | case FSF_STATUS_READ_SUB_ERROR_PORT: |
938 | ZFCP_LOG_FLAGS(1, "FSF_STATUS_READ_SUB_ERROR_PORT\n"); | ||
939 | debug_text_event(adapter->erp_dbf, 1, "unsol_pc_err:"); | 888 | debug_text_event(adapter->erp_dbf, 1, "unsol_pc_err:"); |
940 | zfcp_erp_port_shutdown(port, 0); | 889 | zfcp_erp_port_shutdown(port, 0); |
941 | break; | 890 | break; |
@@ -973,14 +922,13 @@ zfcp_fsf_status_read_handler(struct zfcp_fsf_req *fsf_req) | |||
973 | 922 | ||
974 | if (fsf_req->status & ZFCP_STATUS_FSFREQ_DISMISSED) { | 923 | if (fsf_req->status & ZFCP_STATUS_FSFREQ_DISMISSED) { |
975 | mempool_free(status_buffer, adapter->pool.data_status_read); | 924 | mempool_free(status_buffer, adapter->pool.data_status_read); |
976 | zfcp_fsf_req_cleanup(fsf_req); | 925 | zfcp_fsf_req_free(fsf_req); |
977 | goto out; | 926 | goto out; |
978 | } | 927 | } |
979 | 928 | ||
980 | switch (status_buffer->status_type) { | 929 | switch (status_buffer->status_type) { |
981 | 930 | ||
982 | case FSF_STATUS_READ_PORT_CLOSED: | 931 | case FSF_STATUS_READ_PORT_CLOSED: |
983 | ZFCP_LOG_FLAGS(1, "FSF_STATUS_READ_PORT_CLOSED\n"); | ||
984 | debug_text_event(adapter->erp_dbf, 3, "unsol_pclosed:"); | 932 | debug_text_event(adapter->erp_dbf, 3, "unsol_pclosed:"); |
985 | debug_event(adapter->erp_dbf, 3, | 933 | debug_event(adapter->erp_dbf, 3, |
986 | &status_buffer->d_id, sizeof (u32)); | 934 | &status_buffer->d_id, sizeof (u32)); |
@@ -988,13 +936,11 @@ zfcp_fsf_status_read_handler(struct zfcp_fsf_req *fsf_req) | |||
988 | break; | 936 | break; |
989 | 937 | ||
990 | case FSF_STATUS_READ_INCOMING_ELS: | 938 | case FSF_STATUS_READ_INCOMING_ELS: |
991 | ZFCP_LOG_FLAGS(1, "FSF_STATUS_READ_INCOMING_ELS\n"); | ||
992 | debug_text_event(adapter->erp_dbf, 3, "unsol_els:"); | 939 | debug_text_event(adapter->erp_dbf, 3, "unsol_els:"); |
993 | zfcp_fsf_incoming_els(fsf_req); | 940 | zfcp_fsf_incoming_els(fsf_req); |
994 | break; | 941 | break; |
995 | 942 | ||
996 | case FSF_STATUS_READ_SENSE_DATA_AVAIL: | 943 | case FSF_STATUS_READ_SENSE_DATA_AVAIL: |
997 | ZFCP_LOG_FLAGS(1, "FSF_STATUS_READ_SENSE_DATA_AVAIL\n"); | ||
998 | debug_text_event(adapter->erp_dbf, 3, "unsol_sense:"); | 944 | debug_text_event(adapter->erp_dbf, 3, "unsol_sense:"); |
999 | ZFCP_LOG_INFO("unsolicited sense data received (adapter %s)\n", | 945 | ZFCP_LOG_INFO("unsolicited sense data received (adapter %s)\n", |
1000 | zfcp_get_busid_by_adapter(adapter)); | 946 | zfcp_get_busid_by_adapter(adapter)); |
@@ -1003,7 +949,6 @@ zfcp_fsf_status_read_handler(struct zfcp_fsf_req *fsf_req) | |||
1003 | break; | 949 | break; |
1004 | 950 | ||
1005 | case FSF_STATUS_READ_BIT_ERROR_THRESHOLD: | 951 | case FSF_STATUS_READ_BIT_ERROR_THRESHOLD: |
1006 | ZFCP_LOG_FLAGS(1, "FSF_STATUS_READ_BIT_ERROR_THRESHOLD\n"); | ||
1007 | debug_text_event(adapter->erp_dbf, 3, "unsol_bit_err:"); | 952 | debug_text_event(adapter->erp_dbf, 3, "unsol_bit_err:"); |
1008 | ZFCP_LOG_NORMAL("Bit error threshold data received:\n"); | 953 | ZFCP_LOG_NORMAL("Bit error threshold data received:\n"); |
1009 | ZFCP_HEX_DUMP(ZFCP_LOG_LEVEL_NORMAL, | 954 | ZFCP_HEX_DUMP(ZFCP_LOG_LEVEL_NORMAL, |
@@ -1012,7 +957,6 @@ zfcp_fsf_status_read_handler(struct zfcp_fsf_req *fsf_req) | |||
1012 | break; | 957 | break; |
1013 | 958 | ||
1014 | case FSF_STATUS_READ_LINK_DOWN: | 959 | case FSF_STATUS_READ_LINK_DOWN: |
1015 | ZFCP_LOG_FLAGS(1, "FSF_STATUS_READ_LINK_DOWN\n"); | ||
1016 | debug_text_event(adapter->erp_dbf, 0, "unsol_link_down:"); | 960 | debug_text_event(adapter->erp_dbf, 0, "unsol_link_down:"); |
1017 | ZFCP_LOG_INFO("Local link to adapter %s is down\n", | 961 | ZFCP_LOG_INFO("Local link to adapter %s is down\n", |
1018 | zfcp_get_busid_by_adapter(adapter)); | 962 | zfcp_get_busid_by_adapter(adapter)); |
@@ -1022,7 +966,6 @@ zfcp_fsf_status_read_handler(struct zfcp_fsf_req *fsf_req) | |||
1022 | break; | 966 | break; |
1023 | 967 | ||
1024 | case FSF_STATUS_READ_LINK_UP: | 968 | case FSF_STATUS_READ_LINK_UP: |
1025 | ZFCP_LOG_FLAGS(1, "FSF_STATUS_READ_LINK_UP\n"); | ||
1026 | debug_text_event(adapter->erp_dbf, 2, "unsol_link_up:"); | 969 | debug_text_event(adapter->erp_dbf, 2, "unsol_link_up:"); |
1027 | ZFCP_LOG_INFO("Local link to adapter %s was replugged. " | 970 | ZFCP_LOG_INFO("Local link to adapter %s was replugged. " |
1028 | "Restarting operations on this adapter\n", | 971 | "Restarting operations on this adapter\n", |
@@ -1037,7 +980,6 @@ zfcp_fsf_status_read_handler(struct zfcp_fsf_req *fsf_req) | |||
1037 | break; | 980 | break; |
1038 | 981 | ||
1039 | case FSF_STATUS_READ_CFDC_UPDATED: | 982 | case FSF_STATUS_READ_CFDC_UPDATED: |
1040 | ZFCP_LOG_FLAGS(1, "FSF_STATUS_READ_CFDC_UPDATED\n"); | ||
1041 | debug_text_event(adapter->erp_dbf, 2, "unsol_cfdc_update:"); | 983 | debug_text_event(adapter->erp_dbf, 2, "unsol_cfdc_update:"); |
1042 | ZFCP_LOG_INFO("CFDC has been updated on the adapter %s\n", | 984 | ZFCP_LOG_INFO("CFDC has been updated on the adapter %s\n", |
1043 | zfcp_get_busid_by_adapter(adapter)); | 985 | zfcp_get_busid_by_adapter(adapter)); |
@@ -1045,7 +987,6 @@ zfcp_fsf_status_read_handler(struct zfcp_fsf_req *fsf_req) | |||
1045 | break; | 987 | break; |
1046 | 988 | ||
1047 | case FSF_STATUS_READ_CFDC_HARDENED: | 989 | case FSF_STATUS_READ_CFDC_HARDENED: |
1048 | ZFCP_LOG_FLAGS(1, "FSF_STATUS_READ_CFDC_HARDENED\n"); | ||
1049 | debug_text_event(adapter->erp_dbf, 2, "unsol_cfdc_harden:"); | 990 | debug_text_event(adapter->erp_dbf, 2, "unsol_cfdc_harden:"); |
1050 | switch (status_buffer->status_subtype) { | 991 | switch (status_buffer->status_subtype) { |
1051 | case FSF_STATUS_READ_SUB_CFDC_HARDENED_ON_SE: | 992 | case FSF_STATUS_READ_SUB_CFDC_HARDENED_ON_SE: |
@@ -1078,7 +1019,7 @@ zfcp_fsf_status_read_handler(struct zfcp_fsf_req *fsf_req) | |||
1078 | break; | 1019 | break; |
1079 | } | 1020 | } |
1080 | mempool_free(status_buffer, adapter->pool.data_status_read); | 1021 | mempool_free(status_buffer, adapter->pool.data_status_read); |
1081 | zfcp_fsf_req_cleanup(fsf_req); | 1022 | zfcp_fsf_req_free(fsf_req); |
1082 | /* | 1023 | /* |
1083 | * recycle buffer and start new request repeat until outbound | 1024 | * recycle buffer and start new request repeat until outbound |
1084 | * queue is empty or adapter shutdown is requested | 1025 | * queue is empty or adapter shutdown is requested |
@@ -1214,7 +1155,6 @@ zfcp_fsf_abort_fcp_command_handler(struct zfcp_fsf_req *new_fsf_req) | |||
1214 | 1155 | ||
1215 | case FSF_PORT_HANDLE_NOT_VALID: | 1156 | case FSF_PORT_HANDLE_NOT_VALID: |
1216 | if (status_qual >> 4 != status_qual % 0xf) { | 1157 | if (status_qual >> 4 != status_qual % 0xf) { |
1217 | ZFCP_LOG_FLAGS(2, "FSF_PORT_HANDLE_NOT_VALID\n"); | ||
1218 | debug_text_event(new_fsf_req->adapter->erp_dbf, 3, | 1158 | debug_text_event(new_fsf_req->adapter->erp_dbf, 3, |
1219 | "fsf_s_phand_nv0"); | 1159 | "fsf_s_phand_nv0"); |
1220 | /* | 1160 | /* |
@@ -1223,7 +1163,6 @@ zfcp_fsf_abort_fcp_command_handler(struct zfcp_fsf_req *new_fsf_req) | |||
1223 | * fine. | 1163 | * fine. |
1224 | */ | 1164 | */ |
1225 | } else { | 1165 | } else { |
1226 | ZFCP_LOG_FLAGS(1, "FSF_PORT_HANDLE_NOT_VALID\n"); | ||
1227 | ZFCP_LOG_INFO("Temporary port identifier 0x%x for " | 1166 | ZFCP_LOG_INFO("Temporary port identifier 0x%x for " |
1228 | "port 0x%016Lx on adapter %s invalid. " | 1167 | "port 0x%016Lx on adapter %s invalid. " |
1229 | "This may happen occasionally.\n", | 1168 | "This may happen occasionally.\n", |
@@ -1246,7 +1185,6 @@ zfcp_fsf_abort_fcp_command_handler(struct zfcp_fsf_req *new_fsf_req) | |||
1246 | case FSF_LUN_HANDLE_NOT_VALID: | 1185 | case FSF_LUN_HANDLE_NOT_VALID: |
1247 | if (status_qual >> 4 != status_qual % 0xf) { | 1186 | if (status_qual >> 4 != status_qual % 0xf) { |
1248 | /* 2 */ | 1187 | /* 2 */ |
1249 | ZFCP_LOG_FLAGS(0, "FSF_LUN_HANDLE_NOT_VALID\n"); | ||
1250 | debug_text_event(new_fsf_req->adapter->erp_dbf, 3, | 1188 | debug_text_event(new_fsf_req->adapter->erp_dbf, 3, |
1251 | "fsf_s_lhand_nv0"); | 1189 | "fsf_s_lhand_nv0"); |
1252 | /* | 1190 | /* |
@@ -1255,7 +1193,6 @@ zfcp_fsf_abort_fcp_command_handler(struct zfcp_fsf_req *new_fsf_req) | |||
1255 | * This is fine. | 1193 | * This is fine. |
1256 | */ | 1194 | */ |
1257 | } else { | 1195 | } else { |
1258 | ZFCP_LOG_FLAGS(1, "FSF_LUN_HANDLE_NOT_VALID\n"); | ||
1259 | ZFCP_LOG_INFO | 1196 | ZFCP_LOG_INFO |
1260 | ("Warning: Temporary LUN identifier 0x%x of LUN " | 1197 | ("Warning: Temporary LUN identifier 0x%x of LUN " |
1261 | "0x%016Lx on port 0x%016Lx on adapter %s is " | 1198 | "0x%016Lx on port 0x%016Lx on adapter %s is " |
@@ -1279,7 +1216,6 @@ zfcp_fsf_abort_fcp_command_handler(struct zfcp_fsf_req *new_fsf_req) | |||
1279 | break; | 1216 | break; |
1280 | 1217 | ||
1281 | case FSF_FCP_COMMAND_DOES_NOT_EXIST: | 1218 | case FSF_FCP_COMMAND_DOES_NOT_EXIST: |
1282 | ZFCP_LOG_FLAGS(2, "FSF_FCP_COMMAND_DOES_NOT_EXIST\n"); | ||
1283 | retval = 0; | 1219 | retval = 0; |
1284 | debug_text_event(new_fsf_req->adapter->erp_dbf, 3, | 1220 | debug_text_event(new_fsf_req->adapter->erp_dbf, 3, |
1285 | "fsf_s_no_exist"); | 1221 | "fsf_s_no_exist"); |
@@ -1287,50 +1223,37 @@ zfcp_fsf_abort_fcp_command_handler(struct zfcp_fsf_req *new_fsf_req) | |||
1287 | break; | 1223 | break; |
1288 | 1224 | ||
1289 | case FSF_PORT_BOXED: | 1225 | case FSF_PORT_BOXED: |
1290 | /* 2 */ | ||
1291 | ZFCP_LOG_FLAGS(0, "FSF_PORT_BOXED\n"); | ||
1292 | ZFCP_LOG_INFO("Remote port 0x%016Lx on adapter %s needs to " | 1226 | ZFCP_LOG_INFO("Remote port 0x%016Lx on adapter %s needs to " |
1293 | "be reopened\n", unit->port->wwpn, | 1227 | "be reopened\n", unit->port->wwpn, |
1294 | zfcp_get_busid_by_unit(unit)); | 1228 | zfcp_get_busid_by_unit(unit)); |
1295 | debug_text_event(new_fsf_req->adapter->erp_dbf, 2, | 1229 | debug_text_event(new_fsf_req->adapter->erp_dbf, 2, |
1296 | "fsf_s_pboxed"); | 1230 | "fsf_s_pboxed"); |
1297 | zfcp_erp_port_reopen(unit->port, 0); | 1231 | zfcp_erp_port_boxed(unit->port); |
1298 | new_fsf_req->status |= ZFCP_STATUS_FSFREQ_ERROR | 1232 | new_fsf_req->status |= ZFCP_STATUS_FSFREQ_ERROR |
1299 | | ZFCP_STATUS_FSFREQ_RETRY; | 1233 | | ZFCP_STATUS_FSFREQ_RETRY; |
1300 | break; | 1234 | break; |
1301 | 1235 | ||
1302 | case FSF_LUN_BOXED: | 1236 | case FSF_LUN_BOXED: |
1303 | ZFCP_LOG_FLAGS(0, "FSF_LUN_BOXED\n"); | ||
1304 | ZFCP_LOG_INFO( | 1237 | ZFCP_LOG_INFO( |
1305 | "unit 0x%016Lx on port 0x%016Lx on adapter %s needs " | 1238 | "unit 0x%016Lx on port 0x%016Lx on adapter %s needs " |
1306 | "to be reopened\n", | 1239 | "to be reopened\n", |
1307 | unit->fcp_lun, unit->port->wwpn, | 1240 | unit->fcp_lun, unit->port->wwpn, |
1308 | zfcp_get_busid_by_unit(unit)); | 1241 | zfcp_get_busid_by_unit(unit)); |
1309 | debug_text_event(new_fsf_req->adapter->erp_dbf, 1, "fsf_s_lboxed"); | 1242 | debug_text_event(new_fsf_req->adapter->erp_dbf, 1, "fsf_s_lboxed"); |
1310 | zfcp_erp_unit_reopen(unit, 0); | 1243 | zfcp_erp_unit_boxed(unit); |
1311 | zfcp_cmd_dbf_event_fsf("unitbox", new_fsf_req, | ||
1312 | &new_fsf_req->qtcb->header.fsf_status_qual, | ||
1313 | sizeof(union fsf_status_qual)); | ||
1314 | new_fsf_req->status |= ZFCP_STATUS_FSFREQ_ERROR | 1244 | new_fsf_req->status |= ZFCP_STATUS_FSFREQ_ERROR |
1315 | | ZFCP_STATUS_FSFREQ_RETRY; | 1245 | | ZFCP_STATUS_FSFREQ_RETRY; |
1316 | break; | 1246 | break; |
1317 | 1247 | ||
1318 | case FSF_ADAPTER_STATUS_AVAILABLE: | 1248 | case FSF_ADAPTER_STATUS_AVAILABLE: |
1319 | /* 2 */ | ||
1320 | ZFCP_LOG_FLAGS(0, "FSF_ADAPTER_STATUS_AVAILABLE\n"); | ||
1321 | switch (new_fsf_req->qtcb->header.fsf_status_qual.word[0]) { | 1249 | switch (new_fsf_req->qtcb->header.fsf_status_qual.word[0]) { |
1322 | case FSF_SQ_INVOKE_LINK_TEST_PROCEDURE: | 1250 | case FSF_SQ_INVOKE_LINK_TEST_PROCEDURE: |
1323 | ZFCP_LOG_FLAGS(2, | ||
1324 | "FSF_SQ_INVOKE_LINK_TEST_PROCEDURE\n"); | ||
1325 | debug_text_event(new_fsf_req->adapter->erp_dbf, 1, | 1251 | debug_text_event(new_fsf_req->adapter->erp_dbf, 1, |
1326 | "fsf_sq_ltest"); | 1252 | "fsf_sq_ltest"); |
1327 | /* reopening link to port */ | 1253 | zfcp_test_link(unit->port); |
1328 | zfcp_erp_port_reopen(unit->port, 0); | ||
1329 | new_fsf_req->status |= ZFCP_STATUS_FSFREQ_ERROR; | 1254 | new_fsf_req->status |= ZFCP_STATUS_FSFREQ_ERROR; |
1330 | break; | 1255 | break; |
1331 | case FSF_SQ_ULP_DEPENDENT_ERP_REQUIRED: | 1256 | case FSF_SQ_ULP_DEPENDENT_ERP_REQUIRED: |
1332 | ZFCP_LOG_FLAGS(2, | ||
1333 | "FSF_SQ_ULP_DEPENDENT_ERP_REQUIRED\n"); | ||
1334 | /* SCSI stack will escalate */ | 1257 | /* SCSI stack will escalate */ |
1335 | debug_text_event(new_fsf_req->adapter->erp_dbf, 1, | 1258 | debug_text_event(new_fsf_req->adapter->erp_dbf, 1, |
1336 | "fsf_sq_ulp"); | 1259 | "fsf_sq_ulp"); |
@@ -1350,8 +1273,6 @@ zfcp_fsf_abort_fcp_command_handler(struct zfcp_fsf_req *new_fsf_req) | |||
1350 | break; | 1273 | break; |
1351 | 1274 | ||
1352 | case FSF_GOOD: | 1275 | case FSF_GOOD: |
1353 | /* 3 */ | ||
1354 | ZFCP_LOG_FLAGS(0, "FSF_GOOD\n"); | ||
1355 | retval = 0; | 1276 | retval = 0; |
1356 | new_fsf_req->status |= ZFCP_STATUS_FSFREQ_ABORTSUCCEEDED; | 1277 | new_fsf_req->status |= ZFCP_STATUS_FSFREQ_ABORTSUCCEEDED; |
1357 | break; | 1278 | break; |
@@ -1553,12 +1474,10 @@ zfcp_fsf_send_ct_handler(struct zfcp_fsf_req *fsf_req) | |||
1553 | switch (header->fsf_status) { | 1474 | switch (header->fsf_status) { |
1554 | 1475 | ||
1555 | case FSF_GOOD: | 1476 | case FSF_GOOD: |
1556 | ZFCP_LOG_FLAGS(2,"FSF_GOOD\n"); | ||
1557 | retval = 0; | 1477 | retval = 0; |
1558 | break; | 1478 | break; |
1559 | 1479 | ||
1560 | case FSF_SERVICE_CLASS_NOT_SUPPORTED: | 1480 | case FSF_SERVICE_CLASS_NOT_SUPPORTED: |
1561 | ZFCP_LOG_FLAGS(2, "FSF_SERVICE_CLASS_NOT_SUPPORTED\n"); | ||
1562 | if (adapter->fc_service_class <= 3) { | 1481 | if (adapter->fc_service_class <= 3) { |
1563 | ZFCP_LOG_INFO("error: adapter %s does not support fc " | 1482 | ZFCP_LOG_INFO("error: adapter %s does not support fc " |
1564 | "class %d.\n", | 1483 | "class %d.\n", |
@@ -1578,17 +1497,14 @@ zfcp_fsf_send_ct_handler(struct zfcp_fsf_req *fsf_req) | |||
1578 | break; | 1497 | break; |
1579 | 1498 | ||
1580 | case FSF_ADAPTER_STATUS_AVAILABLE: | 1499 | case FSF_ADAPTER_STATUS_AVAILABLE: |
1581 | ZFCP_LOG_FLAGS(2, "FSF_ADAPTER_STATUS_AVAILABLE\n"); | ||
1582 | switch (header->fsf_status_qual.word[0]){ | 1500 | switch (header->fsf_status_qual.word[0]){ |
1583 | case FSF_SQ_INVOKE_LINK_TEST_PROCEDURE: | 1501 | case FSF_SQ_INVOKE_LINK_TEST_PROCEDURE: |
1584 | ZFCP_LOG_FLAGS(2,"FSF_SQ_INVOKE_LINK_TEST_PROCEDURE\n"); | ||
1585 | /* reopening link to port */ | 1502 | /* reopening link to port */ |
1586 | debug_text_event(adapter->erp_dbf, 1, "fsf_sq_ltest"); | 1503 | debug_text_event(adapter->erp_dbf, 1, "fsf_sq_ltest"); |
1587 | zfcp_test_link(port); | 1504 | zfcp_test_link(port); |
1588 | fsf_req->status |= ZFCP_STATUS_FSFREQ_ERROR; | 1505 | fsf_req->status |= ZFCP_STATUS_FSFREQ_ERROR; |
1589 | break; | 1506 | break; |
1590 | case FSF_SQ_ULP_DEPENDENT_ERP_REQUIRED: | 1507 | case FSF_SQ_ULP_DEPENDENT_ERP_REQUIRED: |
1591 | ZFCP_LOG_FLAGS(2,"FSF_SQ_ULP_DEPENDENT_ERP_REQUIRED\n"); | ||
1592 | /* ERP strategy will escalate */ | 1508 | /* ERP strategy will escalate */ |
1593 | debug_text_event(adapter->erp_dbf, 1, "fsf_sq_ulp"); | 1509 | debug_text_event(adapter->erp_dbf, 1, "fsf_sq_ulp"); |
1594 | fsf_req->status |= ZFCP_STATUS_FSFREQ_ERROR; | 1510 | fsf_req->status |= ZFCP_STATUS_FSFREQ_ERROR; |
@@ -1602,7 +1518,6 @@ zfcp_fsf_send_ct_handler(struct zfcp_fsf_req *fsf_req) | |||
1602 | break; | 1518 | break; |
1603 | 1519 | ||
1604 | case FSF_ACCESS_DENIED: | 1520 | case FSF_ACCESS_DENIED: |
1605 | ZFCP_LOG_FLAGS(2, "FSF_ACCESS_DENIED\n"); | ||
1606 | ZFCP_LOG_NORMAL("access denied, cannot send generic service " | 1521 | ZFCP_LOG_NORMAL("access denied, cannot send generic service " |
1607 | "command (adapter %s, port d_id=0x%08x)\n", | 1522 | "command (adapter %s, port d_id=0x%08x)\n", |
1608 | zfcp_get_busid_by_port(port), port->d_id); | 1523 | zfcp_get_busid_by_port(port), port->d_id); |
@@ -1625,7 +1540,6 @@ zfcp_fsf_send_ct_handler(struct zfcp_fsf_req *fsf_req) | |||
1625 | break; | 1540 | break; |
1626 | 1541 | ||
1627 | case FSF_GENERIC_COMMAND_REJECTED: | 1542 | case FSF_GENERIC_COMMAND_REJECTED: |
1628 | ZFCP_LOG_FLAGS(2, "FSF_GENERIC_COMMAND_REJECTED\n"); | ||
1629 | ZFCP_LOG_INFO("generic service command rejected " | 1543 | ZFCP_LOG_INFO("generic service command rejected " |
1630 | "(adapter %s, port d_id=0x%08x)\n", | 1544 | "(adapter %s, port d_id=0x%08x)\n", |
1631 | zfcp_get_busid_by_port(port), port->d_id); | 1545 | zfcp_get_busid_by_port(port), port->d_id); |
@@ -1638,7 +1552,6 @@ zfcp_fsf_send_ct_handler(struct zfcp_fsf_req *fsf_req) | |||
1638 | break; | 1552 | break; |
1639 | 1553 | ||
1640 | case FSF_PORT_HANDLE_NOT_VALID: | 1554 | case FSF_PORT_HANDLE_NOT_VALID: |
1641 | ZFCP_LOG_FLAGS(2, "FSF_PORT_HANDLE_NOT_VALID\n"); | ||
1642 | ZFCP_LOG_DEBUG("Temporary port identifier 0x%x for port " | 1555 | ZFCP_LOG_DEBUG("Temporary port identifier 0x%x for port " |
1643 | "0x%016Lx on adapter %s invalid. This may " | 1556 | "0x%016Lx on adapter %s invalid. This may " |
1644 | "happen occasionally.\n", port->handle, | 1557 | "happen occasionally.\n", port->handle, |
@@ -1653,12 +1566,11 @@ zfcp_fsf_send_ct_handler(struct zfcp_fsf_req *fsf_req) | |||
1653 | break; | 1566 | break; |
1654 | 1567 | ||
1655 | case FSF_PORT_BOXED: | 1568 | case FSF_PORT_BOXED: |
1656 | ZFCP_LOG_FLAGS(2, "FSF_PORT_BOXED\n"); | ||
1657 | ZFCP_LOG_INFO("port needs to be reopened " | 1569 | ZFCP_LOG_INFO("port needs to be reopened " |
1658 | "(adapter %s, port d_id=0x%08x)\n", | 1570 | "(adapter %s, port d_id=0x%08x)\n", |
1659 | zfcp_get_busid_by_port(port), port->d_id); | 1571 | zfcp_get_busid_by_port(port), port->d_id); |
1660 | debug_text_event(adapter->erp_dbf, 2, "fsf_s_pboxed"); | 1572 | debug_text_event(adapter->erp_dbf, 2, "fsf_s_pboxed"); |
1661 | zfcp_erp_port_reopen(port, 0); | 1573 | zfcp_erp_port_boxed(port); |
1662 | fsf_req->status |= ZFCP_STATUS_FSFREQ_ERROR | 1574 | fsf_req->status |= ZFCP_STATUS_FSFREQ_ERROR |
1663 | | ZFCP_STATUS_FSFREQ_RETRY; | 1575 | | ZFCP_STATUS_FSFREQ_RETRY; |
1664 | break; | 1576 | break; |
@@ -1666,7 +1578,6 @@ zfcp_fsf_send_ct_handler(struct zfcp_fsf_req *fsf_req) | |||
1666 | /* following states should never occure, all cases avoided | 1578 | /* following states should never occure, all cases avoided |
1667 | in zfcp_fsf_send_ct - but who knows ... */ | 1579 | in zfcp_fsf_send_ct - but who knows ... */ |
1668 | case FSF_PAYLOAD_SIZE_MISMATCH: | 1580 | case FSF_PAYLOAD_SIZE_MISMATCH: |
1669 | ZFCP_LOG_FLAGS(2, "FSF_PAYLOAD_SIZE_MISMATCH\n"); | ||
1670 | ZFCP_LOG_INFO("payload size mismatch (adapter: %s, " | 1581 | ZFCP_LOG_INFO("payload size mismatch (adapter: %s, " |
1671 | "req_buf_length=%d, resp_buf_length=%d)\n", | 1582 | "req_buf_length=%d, resp_buf_length=%d)\n", |
1672 | zfcp_get_busid_by_adapter(adapter), | 1583 | zfcp_get_busid_by_adapter(adapter), |
@@ -1674,7 +1585,6 @@ zfcp_fsf_send_ct_handler(struct zfcp_fsf_req *fsf_req) | |||
1674 | fsf_req->status |= ZFCP_STATUS_FSFREQ_ERROR; | 1585 | fsf_req->status |= ZFCP_STATUS_FSFREQ_ERROR; |
1675 | break; | 1586 | break; |
1676 | case FSF_REQUEST_SIZE_TOO_LARGE: | 1587 | case FSF_REQUEST_SIZE_TOO_LARGE: |
1677 | ZFCP_LOG_FLAGS(2, "FSF_REQUEST_SIZE_TOO_LARGE\n"); | ||
1678 | ZFCP_LOG_INFO("request size too large (adapter: %s, " | 1588 | ZFCP_LOG_INFO("request size too large (adapter: %s, " |
1679 | "req_buf_length=%d)\n", | 1589 | "req_buf_length=%d)\n", |
1680 | zfcp_get_busid_by_adapter(adapter), | 1590 | zfcp_get_busid_by_adapter(adapter), |
@@ -1682,7 +1592,6 @@ zfcp_fsf_send_ct_handler(struct zfcp_fsf_req *fsf_req) | |||
1682 | fsf_req->status |= ZFCP_STATUS_FSFREQ_ERROR; | 1592 | fsf_req->status |= ZFCP_STATUS_FSFREQ_ERROR; |
1683 | break; | 1593 | break; |
1684 | case FSF_RESPONSE_SIZE_TOO_LARGE: | 1594 | case FSF_RESPONSE_SIZE_TOO_LARGE: |
1685 | ZFCP_LOG_FLAGS(2, "FSF_RESPONSE_SIZE_TOO_LARGE\n"); | ||
1686 | ZFCP_LOG_INFO("response size too large (adapter: %s, " | 1595 | ZFCP_LOG_INFO("response size too large (adapter: %s, " |
1687 | "resp_buf_length=%d)\n", | 1596 | "resp_buf_length=%d)\n", |
1688 | zfcp_get_busid_by_adapter(adapter), | 1597 | zfcp_get_busid_by_adapter(adapter), |
@@ -1690,7 +1599,6 @@ zfcp_fsf_send_ct_handler(struct zfcp_fsf_req *fsf_req) | |||
1690 | fsf_req->status |= ZFCP_STATUS_FSFREQ_ERROR; | 1599 | fsf_req->status |= ZFCP_STATUS_FSFREQ_ERROR; |
1691 | break; | 1600 | break; |
1692 | case FSF_SBAL_MISMATCH: | 1601 | case FSF_SBAL_MISMATCH: |
1693 | ZFCP_LOG_FLAGS(2, "FSF_SBAL_MISMATCH\n"); | ||
1694 | ZFCP_LOG_INFO("SBAL mismatch (adapter: %s, req_buf_length=%d, " | 1602 | ZFCP_LOG_INFO("SBAL mismatch (adapter: %s, req_buf_length=%d, " |
1695 | "resp_buf_length=%d)\n", | 1603 | "resp_buf_length=%d)\n", |
1696 | zfcp_get_busid_by_adapter(adapter), | 1604 | zfcp_get_busid_by_adapter(adapter), |
@@ -1846,8 +1754,8 @@ zfcp_fsf_send_els(struct zfcp_send_els *els) | |||
1846 | static int zfcp_fsf_send_els_handler(struct zfcp_fsf_req *fsf_req) | 1754 | static int zfcp_fsf_send_els_handler(struct zfcp_fsf_req *fsf_req) |
1847 | { | 1755 | { |
1848 | struct zfcp_adapter *adapter; | 1756 | struct zfcp_adapter *adapter; |
1849 | fc_id_t d_id; | ||
1850 | struct zfcp_port *port; | 1757 | struct zfcp_port *port; |
1758 | fc_id_t d_id; | ||
1851 | struct fsf_qtcb_header *header; | 1759 | struct fsf_qtcb_header *header; |
1852 | struct fsf_qtcb_bottom_support *bottom; | 1760 | struct fsf_qtcb_bottom_support *bottom; |
1853 | struct zfcp_send_els *send_els; | 1761 | struct zfcp_send_els *send_els; |
@@ -1856,6 +1764,7 @@ static int zfcp_fsf_send_els_handler(struct zfcp_fsf_req *fsf_req) | |||
1856 | 1764 | ||
1857 | send_els = fsf_req->data.send_els; | 1765 | send_els = fsf_req->data.send_els; |
1858 | adapter = send_els->adapter; | 1766 | adapter = send_els->adapter; |
1767 | port = send_els->port; | ||
1859 | d_id = send_els->d_id; | 1768 | d_id = send_els->d_id; |
1860 | header = &fsf_req->qtcb->header; | 1769 | header = &fsf_req->qtcb->header; |
1861 | bottom = &fsf_req->qtcb->bottom.support; | 1770 | bottom = &fsf_req->qtcb->bottom.support; |
@@ -1866,12 +1775,10 @@ static int zfcp_fsf_send_els_handler(struct zfcp_fsf_req *fsf_req) | |||
1866 | switch (header->fsf_status) { | 1775 | switch (header->fsf_status) { |
1867 | 1776 | ||
1868 | case FSF_GOOD: | 1777 | case FSF_GOOD: |
1869 | ZFCP_LOG_FLAGS(2, "FSF_GOOD\n"); | ||
1870 | retval = 0; | 1778 | retval = 0; |
1871 | break; | 1779 | break; |
1872 | 1780 | ||
1873 | case FSF_SERVICE_CLASS_NOT_SUPPORTED: | 1781 | case FSF_SERVICE_CLASS_NOT_SUPPORTED: |
1874 | ZFCP_LOG_FLAGS(2, "FSF_SERVICE_CLASS_NOT_SUPPORTED\n"); | ||
1875 | if (adapter->fc_service_class <= 3) { | 1782 | if (adapter->fc_service_class <= 3) { |
1876 | ZFCP_LOG_INFO("error: adapter %s does " | 1783 | ZFCP_LOG_INFO("error: adapter %s does " |
1877 | "not support fibrechannel class %d.\n", | 1784 | "not support fibrechannel class %d.\n", |
@@ -1891,22 +1798,14 @@ static int zfcp_fsf_send_els_handler(struct zfcp_fsf_req *fsf_req) | |||
1891 | break; | 1798 | break; |
1892 | 1799 | ||
1893 | case FSF_ADAPTER_STATUS_AVAILABLE: | 1800 | case FSF_ADAPTER_STATUS_AVAILABLE: |
1894 | ZFCP_LOG_FLAGS(2, "FSF_ADAPTER_STATUS_AVAILABLE\n"); | ||
1895 | switch (header->fsf_status_qual.word[0]){ | 1801 | switch (header->fsf_status_qual.word[0]){ |
1896 | case FSF_SQ_INVOKE_LINK_TEST_PROCEDURE: | 1802 | case FSF_SQ_INVOKE_LINK_TEST_PROCEDURE: |
1897 | ZFCP_LOG_FLAGS(2,"FSF_SQ_INVOKE_LINK_TEST_PROCEDURE\n"); | ||
1898 | debug_text_event(adapter->erp_dbf, 1, "fsf_sq_ltest"); | 1803 | debug_text_event(adapter->erp_dbf, 1, "fsf_sq_ltest"); |
1899 | if (send_els->ls_code != ZFCP_LS_ADISC) { | 1804 | if (port && (send_els->ls_code != ZFCP_LS_ADISC)) |
1900 | read_lock(&zfcp_data.config_lock); | 1805 | zfcp_test_link(port); |
1901 | port = zfcp_get_port_by_did(adapter, d_id); | ||
1902 | if (port) | ||
1903 | zfcp_test_link(port); | ||
1904 | read_unlock(&zfcp_data.config_lock); | ||
1905 | } | ||
1906 | fsf_req->status |= ZFCP_STATUS_FSFREQ_ERROR; | 1806 | fsf_req->status |= ZFCP_STATUS_FSFREQ_ERROR; |
1907 | break; | 1807 | break; |
1908 | case FSF_SQ_ULP_DEPENDENT_ERP_REQUIRED: | 1808 | case FSF_SQ_ULP_DEPENDENT_ERP_REQUIRED: |
1909 | ZFCP_LOG_FLAGS(2,"FSF_SQ_ULP_DEPENDENT_ERP_REQUIRED\n"); | ||
1910 | debug_text_event(adapter->erp_dbf, 1, "fsf_sq_ulp"); | 1809 | debug_text_event(adapter->erp_dbf, 1, "fsf_sq_ulp"); |
1911 | fsf_req->status |= ZFCP_STATUS_FSFREQ_ERROR; | 1810 | fsf_req->status |= ZFCP_STATUS_FSFREQ_ERROR; |
1912 | retval = | 1811 | retval = |
@@ -1915,7 +1814,6 @@ static int zfcp_fsf_send_els_handler(struct zfcp_fsf_req *fsf_req) | |||
1915 | &header->fsf_status_qual.word[2]); | 1814 | &header->fsf_status_qual.word[2]); |
1916 | break; | 1815 | break; |
1917 | case FSF_SQ_RETRY_IF_POSSIBLE: | 1816 | case FSF_SQ_RETRY_IF_POSSIBLE: |
1918 | ZFCP_LOG_FLAGS(2, "FSF_SQ_RETRY_IF_POSSIBLE\n"); | ||
1919 | debug_text_event(adapter->erp_dbf, 1, "fsf_sq_retry"); | 1817 | debug_text_event(adapter->erp_dbf, 1, "fsf_sq_retry"); |
1920 | fsf_req->status |= ZFCP_STATUS_FSFREQ_ERROR; | 1818 | fsf_req->status |= ZFCP_STATUS_FSFREQ_ERROR; |
1921 | break; | 1819 | break; |
@@ -1928,7 +1826,6 @@ static int zfcp_fsf_send_els_handler(struct zfcp_fsf_req *fsf_req) | |||
1928 | break; | 1826 | break; |
1929 | 1827 | ||
1930 | case FSF_ELS_COMMAND_REJECTED: | 1828 | case FSF_ELS_COMMAND_REJECTED: |
1931 | ZFCP_LOG_FLAGS(2, "FSF_ELS_COMMAND_REJECTED\n"); | ||
1932 | ZFCP_LOG_INFO("ELS has been rejected because command filter " | 1829 | ZFCP_LOG_INFO("ELS has been rejected because command filter " |
1933 | "prohibited sending " | 1830 | "prohibited sending " |
1934 | "(adapter: %s, port d_id: 0x%08x)\n", | 1831 | "(adapter: %s, port d_id: 0x%08x)\n", |
@@ -1937,7 +1834,6 @@ static int zfcp_fsf_send_els_handler(struct zfcp_fsf_req *fsf_req) | |||
1937 | break; | 1834 | break; |
1938 | 1835 | ||
1939 | case FSF_PAYLOAD_SIZE_MISMATCH: | 1836 | case FSF_PAYLOAD_SIZE_MISMATCH: |
1940 | ZFCP_LOG_FLAGS(2, "FSF_PAYLOAD_SIZE_MISMATCH\n"); | ||
1941 | ZFCP_LOG_INFO( | 1837 | ZFCP_LOG_INFO( |
1942 | "ELS request size and ELS response size must be either " | 1838 | "ELS request size and ELS response size must be either " |
1943 | "both 0, or both greater than 0 " | 1839 | "both 0, or both greater than 0 " |
@@ -1948,7 +1844,6 @@ static int zfcp_fsf_send_els_handler(struct zfcp_fsf_req *fsf_req) | |||
1948 | break; | 1844 | break; |
1949 | 1845 | ||
1950 | case FSF_REQUEST_SIZE_TOO_LARGE: | 1846 | case FSF_REQUEST_SIZE_TOO_LARGE: |
1951 | ZFCP_LOG_FLAGS(2, "FSF_REQUEST_SIZE_TOO_LARGE\n"); | ||
1952 | ZFCP_LOG_INFO( | 1847 | ZFCP_LOG_INFO( |
1953 | "Length of the ELS request buffer, " | 1848 | "Length of the ELS request buffer, " |
1954 | "specified in QTCB bottom, " | 1849 | "specified in QTCB bottom, " |
@@ -1960,7 +1855,6 @@ static int zfcp_fsf_send_els_handler(struct zfcp_fsf_req *fsf_req) | |||
1960 | break; | 1855 | break; |
1961 | 1856 | ||
1962 | case FSF_RESPONSE_SIZE_TOO_LARGE: | 1857 | case FSF_RESPONSE_SIZE_TOO_LARGE: |
1963 | ZFCP_LOG_FLAGS(2, "FSF_RESPONSE_SIZE_TOO_LARGE\n"); | ||
1964 | ZFCP_LOG_INFO( | 1858 | ZFCP_LOG_INFO( |
1965 | "Length of the ELS response buffer, " | 1859 | "Length of the ELS response buffer, " |
1966 | "specified in QTCB bottom, " | 1860 | "specified in QTCB bottom, " |
@@ -1973,7 +1867,6 @@ static int zfcp_fsf_send_els_handler(struct zfcp_fsf_req *fsf_req) | |||
1973 | 1867 | ||
1974 | case FSF_SBAL_MISMATCH: | 1868 | case FSF_SBAL_MISMATCH: |
1975 | /* should never occure, avoided in zfcp_fsf_send_els */ | 1869 | /* should never occure, avoided in zfcp_fsf_send_els */ |
1976 | ZFCP_LOG_FLAGS(2, "FSF_SBAL_MISMATCH\n"); | ||
1977 | ZFCP_LOG_INFO("SBAL mismatch (adapter: %s, req_buf_length=%d, " | 1870 | ZFCP_LOG_INFO("SBAL mismatch (adapter: %s, req_buf_length=%d, " |
1978 | "resp_buf_length=%d)\n", | 1871 | "resp_buf_length=%d)\n", |
1979 | zfcp_get_busid_by_adapter(adapter), | 1872 | zfcp_get_busid_by_adapter(adapter), |
@@ -1982,7 +1875,6 @@ static int zfcp_fsf_send_els_handler(struct zfcp_fsf_req *fsf_req) | |||
1982 | break; | 1875 | break; |
1983 | 1876 | ||
1984 | case FSF_ACCESS_DENIED: | 1877 | case FSF_ACCESS_DENIED: |
1985 | ZFCP_LOG_FLAGS(2, "FSF_ACCESS_DENIED\n"); | ||
1986 | ZFCP_LOG_NORMAL("access denied, cannot send ELS command " | 1878 | ZFCP_LOG_NORMAL("access denied, cannot send ELS command " |
1987 | "(adapter %s, port d_id=0x%08x)\n", | 1879 | "(adapter %s, port d_id=0x%08x)\n", |
1988 | zfcp_get_busid_by_adapter(adapter), d_id); | 1880 | zfcp_get_busid_by_adapter(adapter), d_id); |
@@ -2000,11 +1892,8 @@ static int zfcp_fsf_send_els_handler(struct zfcp_fsf_req *fsf_req) | |||
2000 | } | 1892 | } |
2001 | } | 1893 | } |
2002 | debug_text_event(adapter->erp_dbf, 1, "fsf_s_access"); | 1894 | debug_text_event(adapter->erp_dbf, 1, "fsf_s_access"); |
2003 | read_lock(&zfcp_data.config_lock); | ||
2004 | port = zfcp_get_port_by_did(adapter, d_id); | ||
2005 | if (port != NULL) | 1895 | if (port != NULL) |
2006 | zfcp_erp_port_access_denied(port); | 1896 | zfcp_erp_port_access_denied(port); |
2007 | read_unlock(&zfcp_data.config_lock); | ||
2008 | fsf_req->status |= ZFCP_STATUS_FSFREQ_ERROR; | 1897 | fsf_req->status |= ZFCP_STATUS_FSFREQ_ERROR; |
2009 | break; | 1898 | break; |
2010 | 1899 | ||
@@ -2195,14 +2084,11 @@ zfcp_fsf_exchange_config_data_handler(struct zfcp_fsf_req *fsf_req) | |||
2195 | switch (fsf_req->qtcb->header.fsf_status) { | 2084 | switch (fsf_req->qtcb->header.fsf_status) { |
2196 | 2085 | ||
2197 | case FSF_GOOD: | 2086 | case FSF_GOOD: |
2198 | ZFCP_LOG_FLAGS(2, "FSF_GOOD\n"); | ||
2199 | |||
2200 | if (zfcp_fsf_exchange_config_evaluate(fsf_req, 1)) | 2087 | if (zfcp_fsf_exchange_config_evaluate(fsf_req, 1)) |
2201 | return -EIO; | 2088 | return -EIO; |
2202 | 2089 | ||
2203 | switch (adapter->fc_topology) { | 2090 | switch (adapter->fc_topology) { |
2204 | case FSF_TOPO_P2P: | 2091 | case FSF_TOPO_P2P: |
2205 | ZFCP_LOG_FLAGS(1, "FSF_TOPO_P2P\n"); | ||
2206 | ZFCP_LOG_NORMAL("Point-to-Point fibrechannel " | 2092 | ZFCP_LOG_NORMAL("Point-to-Point fibrechannel " |
2207 | "configuration detected at adapter %s\n" | 2093 | "configuration detected at adapter %s\n" |
2208 | "Peer WWNN 0x%016llx, " | 2094 | "Peer WWNN 0x%016llx, " |
@@ -2216,7 +2102,6 @@ zfcp_fsf_exchange_config_data_handler(struct zfcp_fsf_req *fsf_req) | |||
2216 | "top-p-to-p"); | 2102 | "top-p-to-p"); |
2217 | break; | 2103 | break; |
2218 | case FSF_TOPO_AL: | 2104 | case FSF_TOPO_AL: |
2219 | ZFCP_LOG_FLAGS(1, "FSF_TOPO_AL\n"); | ||
2220 | ZFCP_LOG_NORMAL("error: Arbitrated loop fibrechannel " | 2105 | ZFCP_LOG_NORMAL("error: Arbitrated loop fibrechannel " |
2221 | "topology detected at adapter %s " | 2106 | "topology detected at adapter %s " |
2222 | "unsupported, shutting down adapter\n", | 2107 | "unsupported, shutting down adapter\n", |
@@ -2226,7 +2111,6 @@ zfcp_fsf_exchange_config_data_handler(struct zfcp_fsf_req *fsf_req) | |||
2226 | zfcp_erp_adapter_shutdown(adapter, 0); | 2111 | zfcp_erp_adapter_shutdown(adapter, 0); |
2227 | return -EIO; | 2112 | return -EIO; |
2228 | case FSF_TOPO_FABRIC: | 2113 | case FSF_TOPO_FABRIC: |
2229 | ZFCP_LOG_FLAGS(1, "FSF_TOPO_FABRIC\n"); | ||
2230 | ZFCP_LOG_INFO("Switched fabric fibrechannel " | 2114 | ZFCP_LOG_INFO("Switched fabric fibrechannel " |
2231 | "network detected at adapter %s.\n", | 2115 | "network detected at adapter %s.\n", |
2232 | zfcp_get_busid_by_adapter(adapter)); | 2116 | zfcp_get_busid_by_adapter(adapter)); |
@@ -2357,7 +2241,7 @@ zfcp_fsf_exchange_port_data(struct zfcp_adapter *adapter, | |||
2357 | wait_event(fsf_req->completion_wq, | 2241 | wait_event(fsf_req->completion_wq, |
2358 | fsf_req->status & ZFCP_STATUS_FSFREQ_COMPLETED); | 2242 | fsf_req->status & ZFCP_STATUS_FSFREQ_COMPLETED); |
2359 | del_timer_sync(timer); | 2243 | del_timer_sync(timer); |
2360 | zfcp_fsf_req_cleanup(fsf_req); | 2244 | zfcp_fsf_req_free(fsf_req); |
2361 | out: | 2245 | out: |
2362 | kfree(timer); | 2246 | kfree(timer); |
2363 | return retval; | 2247 | return retval; |
@@ -2379,7 +2263,6 @@ zfcp_fsf_exchange_port_data_handler(struct zfcp_fsf_req *fsf_req) | |||
2379 | 2263 | ||
2380 | switch (fsf_req->qtcb->header.fsf_status) { | 2264 | switch (fsf_req->qtcb->header.fsf_status) { |
2381 | case FSF_GOOD: | 2265 | case FSF_GOOD: |
2382 | ZFCP_LOG_FLAGS(2,"FSF_GOOD\n"); | ||
2383 | bottom = &fsf_req->qtcb->bottom.port; | 2266 | bottom = &fsf_req->qtcb->bottom.port; |
2384 | memcpy(data, bottom, sizeof(*data)); | 2267 | memcpy(data, bottom, sizeof(*data)); |
2385 | break; | 2268 | break; |
@@ -2481,7 +2364,6 @@ zfcp_fsf_open_port_handler(struct zfcp_fsf_req *fsf_req) | |||
2481 | switch (header->fsf_status) { | 2364 | switch (header->fsf_status) { |
2482 | 2365 | ||
2483 | case FSF_PORT_ALREADY_OPEN: | 2366 | case FSF_PORT_ALREADY_OPEN: |
2484 | ZFCP_LOG_FLAGS(0, "FSF_PORT_ALREADY_OPEN\n"); | ||
2485 | ZFCP_LOG_NORMAL("bug: remote port 0x%016Lx on adapter %s " | 2367 | ZFCP_LOG_NORMAL("bug: remote port 0x%016Lx on adapter %s " |
2486 | "is already open.\n", | 2368 | "is already open.\n", |
2487 | port->wwpn, zfcp_get_busid_by_port(port)); | 2369 | port->wwpn, zfcp_get_busid_by_port(port)); |
@@ -2494,7 +2376,6 @@ zfcp_fsf_open_port_handler(struct zfcp_fsf_req *fsf_req) | |||
2494 | break; | 2376 | break; |
2495 | 2377 | ||
2496 | case FSF_ACCESS_DENIED: | 2378 | case FSF_ACCESS_DENIED: |
2497 | ZFCP_LOG_FLAGS(2, "FSF_ACCESS_DENIED\n"); | ||
2498 | ZFCP_LOG_NORMAL("Access denied, cannot open port 0x%016Lx " | 2379 | ZFCP_LOG_NORMAL("Access denied, cannot open port 0x%016Lx " |
2499 | "on adapter %s\n", | 2380 | "on adapter %s\n", |
2500 | port->wwpn, zfcp_get_busid_by_port(port)); | 2381 | port->wwpn, zfcp_get_busid_by_port(port)); |
@@ -2517,7 +2398,6 @@ zfcp_fsf_open_port_handler(struct zfcp_fsf_req *fsf_req) | |||
2517 | break; | 2398 | break; |
2518 | 2399 | ||
2519 | case FSF_MAXIMUM_NUMBER_OF_PORTS_EXCEEDED: | 2400 | case FSF_MAXIMUM_NUMBER_OF_PORTS_EXCEEDED: |
2520 | ZFCP_LOG_FLAGS(1, "FSF_MAXIMUM_NUMBER_OF_PORTS_EXCEEDED\n"); | ||
2521 | ZFCP_LOG_INFO("error: The FSF adapter is out of resources. " | 2401 | ZFCP_LOG_INFO("error: The FSF adapter is out of resources. " |
2522 | "The remote port 0x%016Lx on adapter %s " | 2402 | "The remote port 0x%016Lx on adapter %s " |
2523 | "could not be opened. Disabling it.\n", | 2403 | "could not be opened. Disabling it.\n", |
@@ -2529,11 +2409,8 @@ zfcp_fsf_open_port_handler(struct zfcp_fsf_req *fsf_req) | |||
2529 | break; | 2409 | break; |
2530 | 2410 | ||
2531 | case FSF_ADAPTER_STATUS_AVAILABLE: | 2411 | case FSF_ADAPTER_STATUS_AVAILABLE: |
2532 | ZFCP_LOG_FLAGS(2, "FSF_ADAPTER_STATUS_AVAILABLE\n"); | ||
2533 | switch (header->fsf_status_qual.word[0]) { | 2412 | switch (header->fsf_status_qual.word[0]) { |
2534 | case FSF_SQ_INVOKE_LINK_TEST_PROCEDURE: | 2413 | case FSF_SQ_INVOKE_LINK_TEST_PROCEDURE: |
2535 | ZFCP_LOG_FLAGS(2, | ||
2536 | "FSF_SQ_INVOKE_LINK_TEST_PROCEDURE\n"); | ||
2537 | debug_text_event(fsf_req->adapter->erp_dbf, 1, | 2414 | debug_text_event(fsf_req->adapter->erp_dbf, 1, |
2538 | "fsf_sq_ltest"); | 2415 | "fsf_sq_ltest"); |
2539 | /* ERP strategy will escalate */ | 2416 | /* ERP strategy will escalate */ |
@@ -2546,7 +2423,6 @@ zfcp_fsf_open_port_handler(struct zfcp_fsf_req *fsf_req) | |||
2546 | fsf_req->status |= ZFCP_STATUS_FSFREQ_ERROR; | 2423 | fsf_req->status |= ZFCP_STATUS_FSFREQ_ERROR; |
2547 | break; | 2424 | break; |
2548 | case FSF_SQ_NO_RETRY_POSSIBLE: | 2425 | case FSF_SQ_NO_RETRY_POSSIBLE: |
2549 | ZFCP_LOG_FLAGS(0, "FSF_SQ_NO_RETRY_POSSIBLE\n"); | ||
2550 | ZFCP_LOG_NORMAL("The remote port 0x%016Lx on " | 2426 | ZFCP_LOG_NORMAL("The remote port 0x%016Lx on " |
2551 | "adapter %s could not be opened. " | 2427 | "adapter %s could not be opened. " |
2552 | "Disabling it.\n", | 2428 | "Disabling it.\n", |
@@ -2572,7 +2448,6 @@ zfcp_fsf_open_port_handler(struct zfcp_fsf_req *fsf_req) | |||
2572 | break; | 2448 | break; |
2573 | 2449 | ||
2574 | case FSF_GOOD: | 2450 | case FSF_GOOD: |
2575 | ZFCP_LOG_FLAGS(3, "FSF_GOOD\n"); | ||
2576 | /* save port handle assigned by FSF */ | 2451 | /* save port handle assigned by FSF */ |
2577 | port->handle = header->port_handle; | 2452 | port->handle = header->port_handle; |
2578 | ZFCP_LOG_INFO("The remote port 0x%016Lx via adapter %s " | 2453 | ZFCP_LOG_INFO("The remote port 0x%016Lx via adapter %s " |
@@ -2582,6 +2457,9 @@ zfcp_fsf_open_port_handler(struct zfcp_fsf_req *fsf_req) | |||
2582 | /* mark port as open */ | 2457 | /* mark port as open */ |
2583 | atomic_set_mask(ZFCP_STATUS_COMMON_OPEN | | 2458 | atomic_set_mask(ZFCP_STATUS_COMMON_OPEN | |
2584 | ZFCP_STATUS_PORT_PHYS_OPEN, &port->status); | 2459 | ZFCP_STATUS_PORT_PHYS_OPEN, &port->status); |
2460 | atomic_clear_mask(ZFCP_STATUS_COMMON_ACCESS_DENIED | | ||
2461 | ZFCP_STATUS_COMMON_ACCESS_BOXED, | ||
2462 | &port->status); | ||
2585 | retval = 0; | 2463 | retval = 0; |
2586 | /* check whether D_ID has changed during open */ | 2464 | /* check whether D_ID has changed during open */ |
2587 | /* | 2465 | /* |
@@ -2630,7 +2508,6 @@ zfcp_fsf_open_port_handler(struct zfcp_fsf_req *fsf_req) | |||
2630 | 2508 | ||
2631 | case FSF_UNKNOWN_OP_SUBTYPE: | 2509 | case FSF_UNKNOWN_OP_SUBTYPE: |
2632 | /* should never occure, subtype not set in zfcp_fsf_open_port */ | 2510 | /* should never occure, subtype not set in zfcp_fsf_open_port */ |
2633 | ZFCP_LOG_FLAGS(2, "FSF_UNKNOWN_OP_SUBTYPE\n"); | ||
2634 | ZFCP_LOG_INFO("unknown operation subtype (adapter: %s, " | 2511 | ZFCP_LOG_INFO("unknown operation subtype (adapter: %s, " |
2635 | "op_subtype=0x%x)\n", | 2512 | "op_subtype=0x%x)\n", |
2636 | zfcp_get_busid_by_port(port), | 2513 | zfcp_get_busid_by_port(port), |
@@ -2739,7 +2616,6 @@ zfcp_fsf_close_port_handler(struct zfcp_fsf_req *fsf_req) | |||
2739 | switch (fsf_req->qtcb->header.fsf_status) { | 2616 | switch (fsf_req->qtcb->header.fsf_status) { |
2740 | 2617 | ||
2741 | case FSF_PORT_HANDLE_NOT_VALID: | 2618 | case FSF_PORT_HANDLE_NOT_VALID: |
2742 | ZFCP_LOG_FLAGS(1, "FSF_PORT_HANDLE_NOT_VALID\n"); | ||
2743 | ZFCP_LOG_INFO("Temporary port identifier 0x%x for port " | 2619 | ZFCP_LOG_INFO("Temporary port identifier 0x%x for port " |
2744 | "0x%016Lx on adapter %s invalid. This may happen " | 2620 | "0x%016Lx on adapter %s invalid. This may happen " |
2745 | "occasionally.\n", port->handle, | 2621 | "occasionally.\n", port->handle, |
@@ -2755,7 +2631,6 @@ zfcp_fsf_close_port_handler(struct zfcp_fsf_req *fsf_req) | |||
2755 | break; | 2631 | break; |
2756 | 2632 | ||
2757 | case FSF_ADAPTER_STATUS_AVAILABLE: | 2633 | case FSF_ADAPTER_STATUS_AVAILABLE: |
2758 | ZFCP_LOG_FLAGS(2, "FSF_ADAPTER_STATUS_AVAILABLE\n"); | ||
2759 | /* Note: FSF has actually closed the port in this case. | 2634 | /* Note: FSF has actually closed the port in this case. |
2760 | * The status code is just daft. Fingers crossed for a change | 2635 | * The status code is just daft. Fingers crossed for a change |
2761 | */ | 2636 | */ |
@@ -2763,7 +2638,6 @@ zfcp_fsf_close_port_handler(struct zfcp_fsf_req *fsf_req) | |||
2763 | break; | 2638 | break; |
2764 | 2639 | ||
2765 | case FSF_GOOD: | 2640 | case FSF_GOOD: |
2766 | ZFCP_LOG_FLAGS(3, "FSF_GOOD\n"); | ||
2767 | ZFCP_LOG_TRACE("remote port 0x016%Lx on adapter %s closed, " | 2641 | ZFCP_LOG_TRACE("remote port 0x016%Lx on adapter %s closed, " |
2768 | "port handle 0x%x\n", port->wwpn, | 2642 | "port handle 0x%x\n", port->wwpn, |
2769 | zfcp_get_busid_by_port(port), port->handle); | 2643 | zfcp_get_busid_by_port(port), port->handle); |
@@ -2884,7 +2758,6 @@ zfcp_fsf_close_physical_port_handler(struct zfcp_fsf_req *fsf_req) | |||
2884 | switch (header->fsf_status) { | 2758 | switch (header->fsf_status) { |
2885 | 2759 | ||
2886 | case FSF_PORT_HANDLE_NOT_VALID: | 2760 | case FSF_PORT_HANDLE_NOT_VALID: |
2887 | ZFCP_LOG_FLAGS(1, "FSF_PORT_HANDLE_NOT_VALID\n"); | ||
2888 | ZFCP_LOG_INFO("Temporary port identifier 0x%x invalid" | 2761 | ZFCP_LOG_INFO("Temporary port identifier 0x%x invalid" |
2889 | "(adapter %s, port 0x%016Lx). " | 2762 | "(adapter %s, port 0x%016Lx). " |
2890 | "This may happen occasionally.\n", | 2763 | "This may happen occasionally.\n", |
@@ -2902,7 +2775,6 @@ zfcp_fsf_close_physical_port_handler(struct zfcp_fsf_req *fsf_req) | |||
2902 | break; | 2775 | break; |
2903 | 2776 | ||
2904 | case FSF_ACCESS_DENIED: | 2777 | case FSF_ACCESS_DENIED: |
2905 | ZFCP_LOG_FLAGS(2, "FSF_ACCESS_DENIED\n"); | ||
2906 | ZFCP_LOG_NORMAL("Access denied, cannot close " | 2778 | ZFCP_LOG_NORMAL("Access denied, cannot close " |
2907 | "physical port 0x%016Lx on adapter %s\n", | 2779 | "physical port 0x%016Lx on adapter %s\n", |
2908 | port->wwpn, zfcp_get_busid_by_port(port)); | 2780 | port->wwpn, zfcp_get_busid_by_port(port)); |
@@ -2925,32 +2797,26 @@ zfcp_fsf_close_physical_port_handler(struct zfcp_fsf_req *fsf_req) | |||
2925 | break; | 2797 | break; |
2926 | 2798 | ||
2927 | case FSF_PORT_BOXED: | 2799 | case FSF_PORT_BOXED: |
2928 | ZFCP_LOG_FLAGS(2, "FSF_PORT_BOXED\n"); | ||
2929 | ZFCP_LOG_DEBUG("The remote port 0x%016Lx on adapter " | 2800 | ZFCP_LOG_DEBUG("The remote port 0x%016Lx on adapter " |
2930 | "%s needs to be reopened but it was attempted " | 2801 | "%s needs to be reopened but it was attempted " |
2931 | "to close it physically.\n", | 2802 | "to close it physically.\n", |
2932 | port->wwpn, | 2803 | port->wwpn, |
2933 | zfcp_get_busid_by_port(port)); | 2804 | zfcp_get_busid_by_port(port)); |
2934 | debug_text_event(fsf_req->adapter->erp_dbf, 1, "fsf_s_pboxed"); | 2805 | debug_text_event(fsf_req->adapter->erp_dbf, 1, "fsf_s_pboxed"); |
2935 | zfcp_erp_port_reopen(port, 0); | 2806 | zfcp_erp_port_boxed(port); |
2936 | fsf_req->status |= ZFCP_STATUS_FSFREQ_ERROR | | 2807 | fsf_req->status |= ZFCP_STATUS_FSFREQ_ERROR | |
2937 | ZFCP_STATUS_FSFREQ_RETRY; | 2808 | ZFCP_STATUS_FSFREQ_RETRY; |
2938 | break; | 2809 | break; |
2939 | 2810 | ||
2940 | case FSF_ADAPTER_STATUS_AVAILABLE: | 2811 | case FSF_ADAPTER_STATUS_AVAILABLE: |
2941 | ZFCP_LOG_FLAGS(2, "FSF_ADAPTER_STATUS_AVAILABLE\n"); | ||
2942 | switch (header->fsf_status_qual.word[0]) { | 2812 | switch (header->fsf_status_qual.word[0]) { |
2943 | case FSF_SQ_INVOKE_LINK_TEST_PROCEDURE: | 2813 | case FSF_SQ_INVOKE_LINK_TEST_PROCEDURE: |
2944 | ZFCP_LOG_FLAGS(2, | ||
2945 | "FSF_SQ_INVOKE_LINK_TEST_PROCEDURE\n"); | ||
2946 | debug_text_event(fsf_req->adapter->erp_dbf, 1, | 2814 | debug_text_event(fsf_req->adapter->erp_dbf, 1, |
2947 | "fsf_sq_ltest"); | 2815 | "fsf_sq_ltest"); |
2948 | /* This will now be escalated by ERP */ | 2816 | /* This will now be escalated by ERP */ |
2949 | fsf_req->status |= ZFCP_STATUS_FSFREQ_ERROR; | 2817 | fsf_req->status |= ZFCP_STATUS_FSFREQ_ERROR; |
2950 | break; | 2818 | break; |
2951 | case FSF_SQ_ULP_DEPENDENT_ERP_REQUIRED: | 2819 | case FSF_SQ_ULP_DEPENDENT_ERP_REQUIRED: |
2952 | ZFCP_LOG_FLAGS(2, | ||
2953 | "FSF_SQ_ULP_DEPENDENT_ERP_REQUIRED\n"); | ||
2954 | /* ERP strategy will escalate */ | 2820 | /* ERP strategy will escalate */ |
2955 | debug_text_event(fsf_req->adapter->erp_dbf, 1, | 2821 | debug_text_event(fsf_req->adapter->erp_dbf, 1, |
2956 | "fsf_sq_ulp"); | 2822 | "fsf_sq_ulp"); |
@@ -2970,7 +2836,6 @@ zfcp_fsf_close_physical_port_handler(struct zfcp_fsf_req *fsf_req) | |||
2970 | break; | 2836 | break; |
2971 | 2837 | ||
2972 | case FSF_GOOD: | 2838 | case FSF_GOOD: |
2973 | ZFCP_LOG_FLAGS(3, "FSF_GOOD\n"); | ||
2974 | ZFCP_LOG_DEBUG("Remote port 0x%016Lx via adapter %s " | 2839 | ZFCP_LOG_DEBUG("Remote port 0x%016Lx via adapter %s " |
2975 | "physically closed, port handle 0x%x\n", | 2840 | "physically closed, port handle 0x%x\n", |
2976 | port->wwpn, | 2841 | port->wwpn, |
@@ -3116,7 +2981,6 @@ zfcp_fsf_open_unit_handler(struct zfcp_fsf_req *fsf_req) | |||
3116 | switch (header->fsf_status) { | 2981 | switch (header->fsf_status) { |
3117 | 2982 | ||
3118 | case FSF_PORT_HANDLE_NOT_VALID: | 2983 | case FSF_PORT_HANDLE_NOT_VALID: |
3119 | ZFCP_LOG_FLAGS(1, "FSF_PORT_HANDLE_NOT_VALID\n"); | ||
3120 | ZFCP_LOG_INFO("Temporary port identifier 0x%x " | 2984 | ZFCP_LOG_INFO("Temporary port identifier 0x%x " |
3121 | "for port 0x%016Lx on adapter %s invalid " | 2985 | "for port 0x%016Lx on adapter %s invalid " |
3122 | "This may happen occasionally\n", | 2986 | "This may happen occasionally\n", |
@@ -3132,7 +2996,6 @@ zfcp_fsf_open_unit_handler(struct zfcp_fsf_req *fsf_req) | |||
3132 | break; | 2996 | break; |
3133 | 2997 | ||
3134 | case FSF_LUN_ALREADY_OPEN: | 2998 | case FSF_LUN_ALREADY_OPEN: |
3135 | ZFCP_LOG_FLAGS(0, "FSF_LUN_ALREADY_OPEN\n"); | ||
3136 | ZFCP_LOG_NORMAL("bug: Attempted to open unit 0x%016Lx on " | 2999 | ZFCP_LOG_NORMAL("bug: Attempted to open unit 0x%016Lx on " |
3137 | "remote port 0x%016Lx on adapter %s twice.\n", | 3000 | "remote port 0x%016Lx on adapter %s twice.\n", |
3138 | unit->fcp_lun, | 3001 | unit->fcp_lun, |
@@ -3143,7 +3006,6 @@ zfcp_fsf_open_unit_handler(struct zfcp_fsf_req *fsf_req) | |||
3143 | break; | 3006 | break; |
3144 | 3007 | ||
3145 | case FSF_ACCESS_DENIED: | 3008 | case FSF_ACCESS_DENIED: |
3146 | ZFCP_LOG_FLAGS(2, "FSF_ACCESS_DENIED\n"); | ||
3147 | ZFCP_LOG_NORMAL("Access denied, cannot open unit 0x%016Lx on " | 3009 | ZFCP_LOG_NORMAL("Access denied, cannot open unit 0x%016Lx on " |
3148 | "remote port 0x%016Lx on adapter %s\n", | 3010 | "remote port 0x%016Lx on adapter %s\n", |
3149 | unit->fcp_lun, unit->port->wwpn, | 3011 | unit->fcp_lun, unit->port->wwpn, |
@@ -3169,18 +3031,16 @@ zfcp_fsf_open_unit_handler(struct zfcp_fsf_req *fsf_req) | |||
3169 | break; | 3031 | break; |
3170 | 3032 | ||
3171 | case FSF_PORT_BOXED: | 3033 | case FSF_PORT_BOXED: |
3172 | ZFCP_LOG_FLAGS(2, "FSF_PORT_BOXED\n"); | ||
3173 | ZFCP_LOG_DEBUG("The remote port 0x%016Lx on adapter %s " | 3034 | ZFCP_LOG_DEBUG("The remote port 0x%016Lx on adapter %s " |
3174 | "needs to be reopened\n", | 3035 | "needs to be reopened\n", |
3175 | unit->port->wwpn, zfcp_get_busid_by_unit(unit)); | 3036 | unit->port->wwpn, zfcp_get_busid_by_unit(unit)); |
3176 | debug_text_event(adapter->erp_dbf, 2, "fsf_s_pboxed"); | 3037 | debug_text_event(adapter->erp_dbf, 2, "fsf_s_pboxed"); |
3177 | zfcp_erp_port_reopen(unit->port, 0); | 3038 | zfcp_erp_port_boxed(unit->port); |
3178 | fsf_req->status |= ZFCP_STATUS_FSFREQ_ERROR | | 3039 | fsf_req->status |= ZFCP_STATUS_FSFREQ_ERROR | |
3179 | ZFCP_STATUS_FSFREQ_RETRY; | 3040 | ZFCP_STATUS_FSFREQ_RETRY; |
3180 | break; | 3041 | break; |
3181 | 3042 | ||
3182 | case FSF_LUN_SHARING_VIOLATION: | 3043 | case FSF_LUN_SHARING_VIOLATION: |
3183 | ZFCP_LOG_FLAGS(2, "FSF_LUN_SHARING_VIOLATION\n"); | ||
3184 | if (header->fsf_status_qual.word[0] != 0) { | 3044 | if (header->fsf_status_qual.word[0] != 0) { |
3185 | ZFCP_LOG_NORMAL("FCP-LUN 0x%Lx at the remote port " | 3045 | ZFCP_LOG_NORMAL("FCP-LUN 0x%Lx at the remote port " |
3186 | "with WWPN 0x%Lx " | 3046 | "with WWPN 0x%Lx " |
@@ -3224,7 +3084,6 @@ zfcp_fsf_open_unit_handler(struct zfcp_fsf_req *fsf_req) | |||
3224 | break; | 3084 | break; |
3225 | 3085 | ||
3226 | case FSF_MAXIMUM_NUMBER_OF_LUNS_EXCEEDED: | 3086 | case FSF_MAXIMUM_NUMBER_OF_LUNS_EXCEEDED: |
3227 | ZFCP_LOG_FLAGS(1, "FSF_MAXIMUM_NUMBER_OF_LUNS_EXCEEDED\n"); | ||
3228 | ZFCP_LOG_INFO("error: The adapter ran out of resources. " | 3087 | ZFCP_LOG_INFO("error: The adapter ran out of resources. " |
3229 | "There is no handle (temporary port identifier) " | 3088 | "There is no handle (temporary port identifier) " |
3230 | "available for unit 0x%016Lx on port 0x%016Lx " | 3089 | "available for unit 0x%016Lx on port 0x%016Lx " |
@@ -3239,20 +3098,15 @@ zfcp_fsf_open_unit_handler(struct zfcp_fsf_req *fsf_req) | |||
3239 | break; | 3098 | break; |
3240 | 3099 | ||
3241 | case FSF_ADAPTER_STATUS_AVAILABLE: | 3100 | case FSF_ADAPTER_STATUS_AVAILABLE: |
3242 | ZFCP_LOG_FLAGS(2, "FSF_ADAPTER_STATUS_AVAILABLE\n"); | ||
3243 | switch (header->fsf_status_qual.word[0]) { | 3101 | switch (header->fsf_status_qual.word[0]) { |
3244 | case FSF_SQ_INVOKE_LINK_TEST_PROCEDURE: | 3102 | case FSF_SQ_INVOKE_LINK_TEST_PROCEDURE: |
3245 | ZFCP_LOG_FLAGS(2, | ||
3246 | "FSF_SQ_INVOKE_LINK_TEST_PROCEDURE\n"); | ||
3247 | /* Re-establish link to port */ | 3103 | /* Re-establish link to port */ |
3248 | debug_text_event(adapter->erp_dbf, 1, | 3104 | debug_text_event(adapter->erp_dbf, 1, |
3249 | "fsf_sq_ltest"); | 3105 | "fsf_sq_ltest"); |
3250 | zfcp_erp_port_reopen(unit->port, 0); | 3106 | zfcp_test_link(unit->port); |
3251 | fsf_req->status |= ZFCP_STATUS_FSFREQ_ERROR; | 3107 | fsf_req->status |= ZFCP_STATUS_FSFREQ_ERROR; |
3252 | break; | 3108 | break; |
3253 | case FSF_SQ_ULP_DEPENDENT_ERP_REQUIRED: | 3109 | case FSF_SQ_ULP_DEPENDENT_ERP_REQUIRED: |
3254 | ZFCP_LOG_FLAGS(2, | ||
3255 | "FSF_SQ_ULP_DEPENDENT_ERP_REQUIRED\n"); | ||
3256 | /* ERP strategy will escalate */ | 3110 | /* ERP strategy will escalate */ |
3257 | debug_text_event(adapter->erp_dbf, 1, | 3111 | debug_text_event(adapter->erp_dbf, 1, |
3258 | "fsf_sq_ulp"); | 3112 | "fsf_sq_ulp"); |
@@ -3271,7 +3125,6 @@ zfcp_fsf_open_unit_handler(struct zfcp_fsf_req *fsf_req) | |||
3271 | break; | 3125 | break; |
3272 | 3126 | ||
3273 | case FSF_INVALID_COMMAND_OPTION: | 3127 | case FSF_INVALID_COMMAND_OPTION: |
3274 | ZFCP_LOG_FLAGS(2, "FSF_INVALID_COMMAND_OPTION\n"); | ||
3275 | ZFCP_LOG_NORMAL( | 3128 | ZFCP_LOG_NORMAL( |
3276 | "Invalid option 0x%x has been specified " | 3129 | "Invalid option 0x%x has been specified " |
3277 | "in QTCB bottom sent to the adapter %s\n", | 3130 | "in QTCB bottom sent to the adapter %s\n", |
@@ -3282,7 +3135,6 @@ zfcp_fsf_open_unit_handler(struct zfcp_fsf_req *fsf_req) | |||
3282 | break; | 3135 | break; |
3283 | 3136 | ||
3284 | case FSF_GOOD: | 3137 | case FSF_GOOD: |
3285 | ZFCP_LOG_FLAGS(3, "FSF_GOOD\n"); | ||
3286 | /* save LUN handle assigned by FSF */ | 3138 | /* save LUN handle assigned by FSF */ |
3287 | unit->handle = header->lun_handle; | 3139 | unit->handle = header->lun_handle; |
3288 | ZFCP_LOG_TRACE("unit 0x%016Lx on remote port 0x%016Lx on " | 3140 | ZFCP_LOG_TRACE("unit 0x%016Lx on remote port 0x%016Lx on " |
@@ -3293,7 +3145,9 @@ zfcp_fsf_open_unit_handler(struct zfcp_fsf_req *fsf_req) | |||
3293 | unit->handle); | 3145 | unit->handle); |
3294 | /* mark unit as open */ | 3146 | /* mark unit as open */ |
3295 | atomic_set_mask(ZFCP_STATUS_COMMON_OPEN, &unit->status); | 3147 | atomic_set_mask(ZFCP_STATUS_COMMON_OPEN, &unit->status); |
3296 | 3148 | atomic_clear_mask(ZFCP_STATUS_COMMON_ACCESS_DENIED | | |
3149 | ZFCP_STATUS_COMMON_ACCESS_BOXED, | ||
3150 | &unit->status); | ||
3297 | if (adapter->supported_features & FSF_FEATURE_LUN_SHARING){ | 3151 | if (adapter->supported_features & FSF_FEATURE_LUN_SHARING){ |
3298 | if (!exclusive) | 3152 | if (!exclusive) |
3299 | atomic_set_mask(ZFCP_STATUS_UNIT_SHARED, | 3153 | atomic_set_mask(ZFCP_STATUS_UNIT_SHARED, |
@@ -3437,7 +3291,6 @@ zfcp_fsf_close_unit_handler(struct zfcp_fsf_req *fsf_req) | |||
3437 | switch (fsf_req->qtcb->header.fsf_status) { | 3291 | switch (fsf_req->qtcb->header.fsf_status) { |
3438 | 3292 | ||
3439 | case FSF_PORT_HANDLE_NOT_VALID: | 3293 | case FSF_PORT_HANDLE_NOT_VALID: |
3440 | ZFCP_LOG_FLAGS(1, "FSF_PORT_HANDLE_NOT_VALID\n"); | ||
3441 | ZFCP_LOG_INFO("Temporary port identifier 0x%x for port " | 3294 | ZFCP_LOG_INFO("Temporary port identifier 0x%x for port " |
3442 | "0x%016Lx on adapter %s invalid. This may " | 3295 | "0x%016Lx on adapter %s invalid. This may " |
3443 | "happen in rare circumstances\n", | 3296 | "happen in rare circumstances\n", |
@@ -3458,7 +3311,6 @@ zfcp_fsf_close_unit_handler(struct zfcp_fsf_req *fsf_req) | |||
3458 | break; | 3311 | break; |
3459 | 3312 | ||
3460 | case FSF_LUN_HANDLE_NOT_VALID: | 3313 | case FSF_LUN_HANDLE_NOT_VALID: |
3461 | ZFCP_LOG_FLAGS(1, "FSF_LUN_HANDLE_NOT_VALID\n"); | ||
3462 | ZFCP_LOG_INFO("Temporary LUN identifier 0x%x of unit " | 3314 | ZFCP_LOG_INFO("Temporary LUN identifier 0x%x of unit " |
3463 | "0x%016Lx on port 0x%016Lx on adapter %s is " | 3315 | "0x%016Lx on port 0x%016Lx on adapter %s is " |
3464 | "invalid. This may happen occasionally.\n", | 3316 | "invalid. This may happen occasionally.\n", |
@@ -3480,32 +3332,26 @@ zfcp_fsf_close_unit_handler(struct zfcp_fsf_req *fsf_req) | |||
3480 | break; | 3332 | break; |
3481 | 3333 | ||
3482 | case FSF_PORT_BOXED: | 3334 | case FSF_PORT_BOXED: |
3483 | ZFCP_LOG_FLAGS(2, "FSF_PORT_BOXED\n"); | ||
3484 | ZFCP_LOG_DEBUG("The remote port 0x%016Lx on adapter %s " | 3335 | ZFCP_LOG_DEBUG("The remote port 0x%016Lx on adapter %s " |
3485 | "needs to be reopened\n", | 3336 | "needs to be reopened\n", |
3486 | unit->port->wwpn, | 3337 | unit->port->wwpn, |
3487 | zfcp_get_busid_by_unit(unit)); | 3338 | zfcp_get_busid_by_unit(unit)); |
3488 | debug_text_event(fsf_req->adapter->erp_dbf, 2, "fsf_s_pboxed"); | 3339 | debug_text_event(fsf_req->adapter->erp_dbf, 2, "fsf_s_pboxed"); |
3489 | zfcp_erp_port_reopen(unit->port, 0); | 3340 | zfcp_erp_port_boxed(unit->port); |
3490 | fsf_req->status |= ZFCP_STATUS_FSFREQ_ERROR | | 3341 | fsf_req->status |= ZFCP_STATUS_FSFREQ_ERROR | |
3491 | ZFCP_STATUS_FSFREQ_RETRY; | 3342 | ZFCP_STATUS_FSFREQ_RETRY; |
3492 | break; | 3343 | break; |
3493 | 3344 | ||
3494 | case FSF_ADAPTER_STATUS_AVAILABLE: | 3345 | case FSF_ADAPTER_STATUS_AVAILABLE: |
3495 | ZFCP_LOG_FLAGS(2, "FSF_ADAPTER_STATUS_AVAILABLE\n"); | ||
3496 | switch (fsf_req->qtcb->header.fsf_status_qual.word[0]) { | 3346 | switch (fsf_req->qtcb->header.fsf_status_qual.word[0]) { |
3497 | case FSF_SQ_INVOKE_LINK_TEST_PROCEDURE: | 3347 | case FSF_SQ_INVOKE_LINK_TEST_PROCEDURE: |
3498 | ZFCP_LOG_FLAGS(2, | ||
3499 | "FSF_SQ_INVOKE_LINK_TEST_PROCEDURE\n"); | ||
3500 | /* re-establish link to port */ | 3348 | /* re-establish link to port */ |
3501 | debug_text_event(fsf_req->adapter->erp_dbf, 1, | 3349 | debug_text_event(fsf_req->adapter->erp_dbf, 1, |
3502 | "fsf_sq_ltest"); | 3350 | "fsf_sq_ltest"); |
3503 | zfcp_erp_port_reopen(unit->port, 0); | 3351 | zfcp_test_link(unit->port); |
3504 | fsf_req->status |= ZFCP_STATUS_FSFREQ_ERROR; | 3352 | fsf_req->status |= ZFCP_STATUS_FSFREQ_ERROR; |
3505 | break; | 3353 | break; |
3506 | case FSF_SQ_ULP_DEPENDENT_ERP_REQUIRED: | 3354 | case FSF_SQ_ULP_DEPENDENT_ERP_REQUIRED: |
3507 | ZFCP_LOG_FLAGS(2, | ||
3508 | "FSF_SQ_ULP_DEPENDENT_ERP_REQUIRED\n"); | ||
3509 | /* ERP strategy will escalate */ | 3355 | /* ERP strategy will escalate */ |
3510 | debug_text_event(fsf_req->adapter->erp_dbf, 1, | 3356 | debug_text_event(fsf_req->adapter->erp_dbf, 1, |
3511 | "fsf_sq_ulp"); | 3357 | "fsf_sq_ulp"); |
@@ -3526,7 +3372,6 @@ zfcp_fsf_close_unit_handler(struct zfcp_fsf_req *fsf_req) | |||
3526 | break; | 3372 | break; |
3527 | 3373 | ||
3528 | case FSF_GOOD: | 3374 | case FSF_GOOD: |
3529 | ZFCP_LOG_FLAGS(3, "FSF_GOOD\n"); | ||
3530 | ZFCP_LOG_TRACE("unit 0x%016Lx on port 0x%016Lx on adapter %s " | 3375 | ZFCP_LOG_TRACE("unit 0x%016Lx on port 0x%016Lx on adapter %s " |
3531 | "closed, port handle 0x%x\n", | 3376 | "closed, port handle 0x%x\n", |
3532 | unit->fcp_lun, | 3377 | unit->fcp_lun, |
@@ -3622,7 +3467,6 @@ zfcp_fsf_send_fcp_command_task(struct zfcp_adapter *adapter, | |||
3622 | */ | 3467 | */ |
3623 | switch (scsi_cmnd->sc_data_direction) { | 3468 | switch (scsi_cmnd->sc_data_direction) { |
3624 | case DMA_NONE: | 3469 | case DMA_NONE: |
3625 | ZFCP_LOG_FLAGS(3, "DMA_NONE\n"); | ||
3626 | fsf_req->qtcb->bottom.io.data_direction = FSF_DATADIR_CMND; | 3470 | fsf_req->qtcb->bottom.io.data_direction = FSF_DATADIR_CMND; |
3627 | /* | 3471 | /* |
3628 | * FIXME(qdio): | 3472 | * FIXME(qdio): |
@@ -3632,19 +3476,16 @@ zfcp_fsf_send_fcp_command_task(struct zfcp_adapter *adapter, | |||
3632 | sbtype = SBAL_FLAGS0_TYPE_READ; | 3476 | sbtype = SBAL_FLAGS0_TYPE_READ; |
3633 | break; | 3477 | break; |
3634 | case DMA_FROM_DEVICE: | 3478 | case DMA_FROM_DEVICE: |
3635 | ZFCP_LOG_FLAGS(3, "DMA_FROM_DEVICE\n"); | ||
3636 | fsf_req->qtcb->bottom.io.data_direction = FSF_DATADIR_READ; | 3479 | fsf_req->qtcb->bottom.io.data_direction = FSF_DATADIR_READ; |
3637 | sbtype = SBAL_FLAGS0_TYPE_READ; | 3480 | sbtype = SBAL_FLAGS0_TYPE_READ; |
3638 | fcp_cmnd_iu->rddata = 1; | 3481 | fcp_cmnd_iu->rddata = 1; |
3639 | break; | 3482 | break; |
3640 | case DMA_TO_DEVICE: | 3483 | case DMA_TO_DEVICE: |
3641 | ZFCP_LOG_FLAGS(3, "DMA_TO_DEVICE\n"); | ||
3642 | fsf_req->qtcb->bottom.io.data_direction = FSF_DATADIR_WRITE; | 3484 | fsf_req->qtcb->bottom.io.data_direction = FSF_DATADIR_WRITE; |
3643 | sbtype = SBAL_FLAGS0_TYPE_WRITE; | 3485 | sbtype = SBAL_FLAGS0_TYPE_WRITE; |
3644 | fcp_cmnd_iu->wddata = 1; | 3486 | fcp_cmnd_iu->wddata = 1; |
3645 | break; | 3487 | break; |
3646 | case DMA_BIDIRECTIONAL: | 3488 | case DMA_BIDIRECTIONAL: |
3647 | ZFCP_LOG_FLAGS(0, "DMA_BIDIRECTIONAL not supported\n"); | ||
3648 | default: | 3489 | default: |
3649 | /* | 3490 | /* |
3650 | * dummy, catch this condition earlier | 3491 | * dummy, catch this condition earlier |
@@ -3877,7 +3718,6 @@ zfcp_fsf_send_fcp_command_handler(struct zfcp_fsf_req *fsf_req) | |||
3877 | switch (header->fsf_status) { | 3718 | switch (header->fsf_status) { |
3878 | 3719 | ||
3879 | case FSF_PORT_HANDLE_NOT_VALID: | 3720 | case FSF_PORT_HANDLE_NOT_VALID: |
3880 | ZFCP_LOG_FLAGS(1, "FSF_PORT_HANDLE_NOT_VALID\n"); | ||
3881 | ZFCP_LOG_INFO("Temporary port identifier 0x%x for port " | 3721 | ZFCP_LOG_INFO("Temporary port identifier 0x%x for port " |
3882 | "0x%016Lx on adapter %s invalid\n", | 3722 | "0x%016Lx on adapter %s invalid\n", |
3883 | unit->port->handle, | 3723 | unit->port->handle, |
@@ -3892,7 +3732,6 @@ zfcp_fsf_send_fcp_command_handler(struct zfcp_fsf_req *fsf_req) | |||
3892 | break; | 3732 | break; |
3893 | 3733 | ||
3894 | case FSF_LUN_HANDLE_NOT_VALID: | 3734 | case FSF_LUN_HANDLE_NOT_VALID: |
3895 | ZFCP_LOG_FLAGS(1, "FSF_LUN_HANDLE_NOT_VALID\n"); | ||
3896 | ZFCP_LOG_INFO("Temporary LUN identifier 0x%x for unit " | 3735 | ZFCP_LOG_INFO("Temporary LUN identifier 0x%x for unit " |
3897 | "0x%016Lx on port 0x%016Lx on adapter %s is " | 3736 | "0x%016Lx on port 0x%016Lx on adapter %s is " |
3898 | "invalid. This may happen occasionally.\n", | 3737 | "invalid. This may happen occasionally.\n", |
@@ -3911,7 +3750,6 @@ zfcp_fsf_send_fcp_command_handler(struct zfcp_fsf_req *fsf_req) | |||
3911 | break; | 3750 | break; |
3912 | 3751 | ||
3913 | case FSF_HANDLE_MISMATCH: | 3752 | case FSF_HANDLE_MISMATCH: |
3914 | ZFCP_LOG_FLAGS(0, "FSF_HANDLE_MISMATCH\n"); | ||
3915 | ZFCP_LOG_NORMAL("bug: The port handle 0x%x has changed " | 3753 | ZFCP_LOG_NORMAL("bug: The port handle 0x%x has changed " |
3916 | "unexpectedly. (adapter %s, port 0x%016Lx, " | 3754 | "unexpectedly. (adapter %s, port 0x%016Lx, " |
3917 | "unit 0x%016Lx)\n", | 3755 | "unit 0x%016Lx)\n", |
@@ -3934,7 +3772,6 @@ zfcp_fsf_send_fcp_command_handler(struct zfcp_fsf_req *fsf_req) | |||
3934 | break; | 3772 | break; |
3935 | 3773 | ||
3936 | case FSF_SERVICE_CLASS_NOT_SUPPORTED: | 3774 | case FSF_SERVICE_CLASS_NOT_SUPPORTED: |
3937 | ZFCP_LOG_FLAGS(0, "FSF_SERVICE_CLASS_NOT_SUPPORTED\n"); | ||
3938 | if (fsf_req->adapter->fc_service_class <= 3) { | 3775 | if (fsf_req->adapter->fc_service_class <= 3) { |
3939 | ZFCP_LOG_NORMAL("error: The adapter %s does " | 3776 | ZFCP_LOG_NORMAL("error: The adapter %s does " |
3940 | "not support fibrechannel class %d.\n", | 3777 | "not support fibrechannel class %d.\n", |
@@ -3959,7 +3796,6 @@ zfcp_fsf_send_fcp_command_handler(struct zfcp_fsf_req *fsf_req) | |||
3959 | break; | 3796 | break; |
3960 | 3797 | ||
3961 | case FSF_FCPLUN_NOT_VALID: | 3798 | case FSF_FCPLUN_NOT_VALID: |
3962 | ZFCP_LOG_FLAGS(0, "FSF_FCPLUN_NOT_VALID\n"); | ||
3963 | ZFCP_LOG_NORMAL("bug: unit 0x%016Lx on port 0x%016Lx on " | 3799 | ZFCP_LOG_NORMAL("bug: unit 0x%016Lx on port 0x%016Lx on " |
3964 | "adapter %s does not have correct unit " | 3800 | "adapter %s does not have correct unit " |
3965 | "handle 0x%x\n", | 3801 | "handle 0x%x\n", |
@@ -3982,7 +3818,6 @@ zfcp_fsf_send_fcp_command_handler(struct zfcp_fsf_req *fsf_req) | |||
3982 | break; | 3818 | break; |
3983 | 3819 | ||
3984 | case FSF_ACCESS_DENIED: | 3820 | case FSF_ACCESS_DENIED: |
3985 | ZFCP_LOG_FLAGS(2, "FSF_ACCESS_DENIED\n"); | ||
3986 | ZFCP_LOG_NORMAL("Access denied, cannot send FCP command to " | 3821 | ZFCP_LOG_NORMAL("Access denied, cannot send FCP command to " |
3987 | "unit 0x%016Lx on port 0x%016Lx on " | 3822 | "unit 0x%016Lx on port 0x%016Lx on " |
3988 | "adapter %s\n", unit->fcp_lun, unit->port->wwpn, | 3823 | "adapter %s\n", unit->fcp_lun, unit->port->wwpn, |
@@ -4006,7 +3841,6 @@ zfcp_fsf_send_fcp_command_handler(struct zfcp_fsf_req *fsf_req) | |||
4006 | break; | 3841 | break; |
4007 | 3842 | ||
4008 | case FSF_DIRECTION_INDICATOR_NOT_VALID: | 3843 | case FSF_DIRECTION_INDICATOR_NOT_VALID: |
4009 | ZFCP_LOG_FLAGS(0, "FSF_DIRECTION_INDICATOR_NOT_VALID\n"); | ||
4010 | ZFCP_LOG_INFO("bug: Invalid data direction given for unit " | 3844 | ZFCP_LOG_INFO("bug: Invalid data direction given for unit " |
4011 | "0x%016Lx on port 0x%016Lx on adapter %s " | 3845 | "0x%016Lx on port 0x%016Lx on adapter %s " |
4012 | "(debug info %d)\n", | 3846 | "(debug info %d)\n", |
@@ -4026,7 +3860,6 @@ zfcp_fsf_send_fcp_command_handler(struct zfcp_fsf_req *fsf_req) | |||
4026 | break; | 3860 | break; |
4027 | 3861 | ||
4028 | case FSF_CMND_LENGTH_NOT_VALID: | 3862 | case FSF_CMND_LENGTH_NOT_VALID: |
4029 | ZFCP_LOG_FLAGS(0, "FSF_CMND_LENGTH_NOT_VALID\n"); | ||
4030 | ZFCP_LOG_NORMAL | 3863 | ZFCP_LOG_NORMAL |
4031 | ("bug: An invalid control-data-block length field " | 3864 | ("bug: An invalid control-data-block length field " |
4032 | "was found in a command for unit 0x%016Lx on port " | 3865 | "was found in a command for unit 0x%016Lx on port " |
@@ -4046,69 +3879,43 @@ zfcp_fsf_send_fcp_command_handler(struct zfcp_fsf_req *fsf_req) | |||
4046 | break; | 3879 | break; |
4047 | 3880 | ||
4048 | case FSF_PORT_BOXED: | 3881 | case FSF_PORT_BOXED: |
4049 | ZFCP_LOG_FLAGS(2, "FSF_PORT_BOXED\n"); | ||
4050 | ZFCP_LOG_DEBUG("The remote port 0x%016Lx on adapter %s " | 3882 | ZFCP_LOG_DEBUG("The remote port 0x%016Lx on adapter %s " |
4051 | "needs to be reopened\n", | 3883 | "needs to be reopened\n", |
4052 | unit->port->wwpn, zfcp_get_busid_by_unit(unit)); | 3884 | unit->port->wwpn, zfcp_get_busid_by_unit(unit)); |
4053 | debug_text_event(fsf_req->adapter->erp_dbf, 2, "fsf_s_pboxed"); | 3885 | debug_text_event(fsf_req->adapter->erp_dbf, 2, "fsf_s_pboxed"); |
4054 | zfcp_erp_port_reopen(unit->port, 0); | 3886 | zfcp_erp_port_boxed(unit->port); |
4055 | zfcp_cmd_dbf_event_fsf("portbox", fsf_req, | ||
4056 | &header->fsf_status_qual, | ||
4057 | sizeof (union fsf_status_qual)); | ||
4058 | fsf_req->status |= ZFCP_STATUS_FSFREQ_ERROR | | 3887 | fsf_req->status |= ZFCP_STATUS_FSFREQ_ERROR | |
4059 | ZFCP_STATUS_FSFREQ_RETRY; | 3888 | ZFCP_STATUS_FSFREQ_RETRY; |
4060 | break; | 3889 | break; |
4061 | 3890 | ||
4062 | case FSF_LUN_BOXED: | 3891 | case FSF_LUN_BOXED: |
4063 | ZFCP_LOG_FLAGS(0, "FSF_LUN_BOXED\n"); | ||
4064 | ZFCP_LOG_NORMAL("unit needs to be reopened (adapter %s, " | 3892 | ZFCP_LOG_NORMAL("unit needs to be reopened (adapter %s, " |
4065 | "wwpn=0x%016Lx, fcp_lun=0x%016Lx)\n", | 3893 | "wwpn=0x%016Lx, fcp_lun=0x%016Lx)\n", |
4066 | zfcp_get_busid_by_unit(unit), | 3894 | zfcp_get_busid_by_unit(unit), |
4067 | unit->port->wwpn, unit->fcp_lun); | 3895 | unit->port->wwpn, unit->fcp_lun); |
4068 | debug_text_event(fsf_req->adapter->erp_dbf, 1, "fsf_s_lboxed"); | 3896 | debug_text_event(fsf_req->adapter->erp_dbf, 1, "fsf_s_lboxed"); |
4069 | zfcp_erp_unit_reopen(unit, 0); | 3897 | zfcp_erp_unit_boxed(unit); |
4070 | zfcp_cmd_dbf_event_fsf("unitbox", fsf_req, | ||
4071 | &header->fsf_status_qual, | ||
4072 | sizeof(union fsf_status_qual)); | ||
4073 | fsf_req->status |= ZFCP_STATUS_FSFREQ_ERROR | 3898 | fsf_req->status |= ZFCP_STATUS_FSFREQ_ERROR |
4074 | | ZFCP_STATUS_FSFREQ_RETRY; | 3899 | | ZFCP_STATUS_FSFREQ_RETRY; |
4075 | break; | 3900 | break; |
4076 | 3901 | ||
4077 | case FSF_ADAPTER_STATUS_AVAILABLE: | 3902 | case FSF_ADAPTER_STATUS_AVAILABLE: |
4078 | ZFCP_LOG_FLAGS(2, "FSF_ADAPTER_STATUS_AVAILABLE\n"); | ||
4079 | switch (header->fsf_status_qual.word[0]) { | 3903 | switch (header->fsf_status_qual.word[0]) { |
4080 | case FSF_SQ_INVOKE_LINK_TEST_PROCEDURE: | 3904 | case FSF_SQ_INVOKE_LINK_TEST_PROCEDURE: |
4081 | ZFCP_LOG_FLAGS(2, | ||
4082 | "FSF_SQ_INVOKE_LINK_TEST_PROCEDURE\n"); | ||
4083 | /* re-establish link to port */ | 3905 | /* re-establish link to port */ |
4084 | debug_text_event(fsf_req->adapter->erp_dbf, 1, | 3906 | debug_text_event(fsf_req->adapter->erp_dbf, 1, |
4085 | "fsf_sq_ltest"); | 3907 | "fsf_sq_ltest"); |
4086 | zfcp_erp_port_reopen(unit->port, 0); | 3908 | zfcp_test_link(unit->port); |
4087 | zfcp_cmd_dbf_event_fsf( | ||
4088 | "sqltest", | ||
4089 | fsf_req, | ||
4090 | &header->fsf_status_qual, | ||
4091 | sizeof (union fsf_status_qual)); | ||
4092 | fsf_req->status |= ZFCP_STATUS_FSFREQ_ERROR; | ||
4093 | break; | 3909 | break; |
4094 | case FSF_SQ_ULP_DEPENDENT_ERP_REQUIRED: | 3910 | case FSF_SQ_ULP_DEPENDENT_ERP_REQUIRED: |
4095 | ZFCP_LOG_FLAGS(3, | ||
4096 | "FSF_SQ_ULP_DEPENDENT_ERP_REQUIRED\n"); | ||
4097 | /* FIXME(hw) need proper specs for proper action */ | 3911 | /* FIXME(hw) need proper specs for proper action */ |
4098 | /* let scsi stack deal with retries and escalation */ | 3912 | /* let scsi stack deal with retries and escalation */ |
4099 | debug_text_event(fsf_req->adapter->erp_dbf, 1, | 3913 | debug_text_event(fsf_req->adapter->erp_dbf, 1, |
4100 | "fsf_sq_ulp"); | 3914 | "fsf_sq_ulp"); |
4101 | zfcp_cmd_dbf_event_fsf( | ||
4102 | "sqdeperp", | ||
4103 | fsf_req, | ||
4104 | &header->fsf_status_qual, | ||
4105 | sizeof (union fsf_status_qual)); | ||
4106 | fsf_req->status |= ZFCP_STATUS_FSFREQ_ERROR; | ||
4107 | break; | 3915 | break; |
4108 | default: | 3916 | default: |
4109 | /* FIXME: shall we consider this a successful transfer? */ | ||
4110 | ZFCP_LOG_NORMAL | 3917 | ZFCP_LOG_NORMAL |
4111 | ("bug: Wrong status qualifier 0x%x arrived.\n", | 3918 | ("Unknown status qualifier 0x%x arrived.\n", |
4112 | header->fsf_status_qual.word[0]); | 3919 | header->fsf_status_qual.word[0]); |
4113 | debug_text_event(fsf_req->adapter->erp_dbf, 0, | 3920 | debug_text_event(fsf_req->adapter->erp_dbf, 0, |
4114 | "fsf_sq_inval:"); | 3921 | "fsf_sq_inval:"); |
@@ -4117,14 +3924,13 @@ zfcp_fsf_send_fcp_command_handler(struct zfcp_fsf_req *fsf_req) | |||
4117 | sizeof(u32)); | 3924 | sizeof(u32)); |
4118 | break; | 3925 | break; |
4119 | } | 3926 | } |
3927 | fsf_req->status |= ZFCP_STATUS_FSFREQ_ERROR; | ||
4120 | break; | 3928 | break; |
4121 | 3929 | ||
4122 | case FSF_GOOD: | 3930 | case FSF_GOOD: |
4123 | ZFCP_LOG_FLAGS(3, "FSF_GOOD\n"); | ||
4124 | break; | 3931 | break; |
4125 | 3932 | ||
4126 | case FSF_FCP_RSP_AVAILABLE: | 3933 | case FSF_FCP_RSP_AVAILABLE: |
4127 | ZFCP_LOG_FLAGS(2, "FSF_FCP_RSP_AVAILABLE\n"); | ||
4128 | break; | 3934 | break; |
4129 | 3935 | ||
4130 | default: | 3936 | default: |
@@ -4217,14 +4023,12 @@ zfcp_fsf_send_fcp_command_task_handler(struct zfcp_fsf_req *fsf_req) | |||
4217 | ZFCP_LOG_DEBUG("rsp_len is valid\n"); | 4023 | ZFCP_LOG_DEBUG("rsp_len is valid\n"); |
4218 | switch (fcp_rsp_info[3]) { | 4024 | switch (fcp_rsp_info[3]) { |
4219 | case RSP_CODE_GOOD: | 4025 | case RSP_CODE_GOOD: |
4220 | ZFCP_LOG_FLAGS(3, "RSP_CODE_GOOD\n"); | ||
4221 | /* ok, continue */ | 4026 | /* ok, continue */ |
4222 | ZFCP_LOG_TRACE("no failure or Task Management " | 4027 | ZFCP_LOG_TRACE("no failure or Task Management " |
4223 | "Function complete\n"); | 4028 | "Function complete\n"); |
4224 | set_host_byte(&scpnt->result, DID_OK); | 4029 | set_host_byte(&scpnt->result, DID_OK); |
4225 | break; | 4030 | break; |
4226 | case RSP_CODE_LENGTH_MISMATCH: | 4031 | case RSP_CODE_LENGTH_MISMATCH: |
4227 | ZFCP_LOG_FLAGS(0, "RSP_CODE_LENGTH_MISMATCH\n"); | ||
4228 | /* hardware bug */ | 4032 | /* hardware bug */ |
4229 | ZFCP_LOG_NORMAL("bug: FCP response code indictates " | 4033 | ZFCP_LOG_NORMAL("bug: FCP response code indictates " |
4230 | "that the fibrechannel protocol data " | 4034 | "that the fibrechannel protocol data " |
@@ -4242,7 +4046,6 @@ zfcp_fsf_send_fcp_command_task_handler(struct zfcp_fsf_req *fsf_req) | |||
4242 | set_host_byte(&scpnt->result, DID_ERROR); | 4046 | set_host_byte(&scpnt->result, DID_ERROR); |
4243 | goto skip_fsfstatus; | 4047 | goto skip_fsfstatus; |
4244 | case RSP_CODE_FIELD_INVALID: | 4048 | case RSP_CODE_FIELD_INVALID: |
4245 | ZFCP_LOG_FLAGS(0, "RSP_CODE_FIELD_INVALID\n"); | ||
4246 | /* driver or hardware bug */ | 4049 | /* driver or hardware bug */ |
4247 | ZFCP_LOG_NORMAL("bug: FCP response code indictates " | 4050 | ZFCP_LOG_NORMAL("bug: FCP response code indictates " |
4248 | "that the fibrechannel protocol data " | 4051 | "that the fibrechannel protocol data " |
@@ -4261,7 +4064,6 @@ zfcp_fsf_send_fcp_command_task_handler(struct zfcp_fsf_req *fsf_req) | |||
4261 | zfcp_cmd_dbf_event_fsf("codeinv", fsf_req, NULL, 0); | 4064 | zfcp_cmd_dbf_event_fsf("codeinv", fsf_req, NULL, 0); |
4262 | goto skip_fsfstatus; | 4065 | goto skip_fsfstatus; |
4263 | case RSP_CODE_RO_MISMATCH: | 4066 | case RSP_CODE_RO_MISMATCH: |
4264 | ZFCP_LOG_FLAGS(0, "RSP_CODE_RO_MISMATCH\n"); | ||
4265 | /* hardware bug */ | 4067 | /* hardware bug */ |
4266 | ZFCP_LOG_NORMAL("bug: The FCP response code indicates " | 4068 | ZFCP_LOG_NORMAL("bug: The FCP response code indicates " |
4267 | "that conflicting values for the " | 4069 | "that conflicting values for the " |
@@ -4407,13 +4209,11 @@ zfcp_fsf_send_fcp_command_task_management_handler(struct zfcp_fsf_req *fsf_req) | |||
4407 | /* check FCP_RSP_INFO */ | 4209 | /* check FCP_RSP_INFO */ |
4408 | switch (fcp_rsp_info[3]) { | 4210 | switch (fcp_rsp_info[3]) { |
4409 | case RSP_CODE_GOOD: | 4211 | case RSP_CODE_GOOD: |
4410 | ZFCP_LOG_FLAGS(3, "RSP_CODE_GOOD\n"); | ||
4411 | /* ok, continue */ | 4212 | /* ok, continue */ |
4412 | ZFCP_LOG_DEBUG("no failure or Task Management " | 4213 | ZFCP_LOG_DEBUG("no failure or Task Management " |
4413 | "Function complete\n"); | 4214 | "Function complete\n"); |
4414 | break; | 4215 | break; |
4415 | case RSP_CODE_TASKMAN_UNSUPP: | 4216 | case RSP_CODE_TASKMAN_UNSUPP: |
4416 | ZFCP_LOG_FLAGS(0, "RSP_CODE_TASKMAN_UNSUPP\n"); | ||
4417 | ZFCP_LOG_NORMAL("bug: A reuested task management function " | 4217 | ZFCP_LOG_NORMAL("bug: A reuested task management function " |
4418 | "is not supported on the target device " | 4218 | "is not supported on the target device " |
4419 | "unit 0x%016Lx, port 0x%016Lx, adapter %s\n ", | 4219 | "unit 0x%016Lx, port 0x%016Lx, adapter %s\n ", |
@@ -4423,7 +4223,6 @@ zfcp_fsf_send_fcp_command_task_management_handler(struct zfcp_fsf_req *fsf_req) | |||
4423 | fsf_req->status |= ZFCP_STATUS_FSFREQ_TMFUNCNOTSUPP; | 4223 | fsf_req->status |= ZFCP_STATUS_FSFREQ_TMFUNCNOTSUPP; |
4424 | break; | 4224 | break; |
4425 | case RSP_CODE_TASKMAN_FAILED: | 4225 | case RSP_CODE_TASKMAN_FAILED: |
4426 | ZFCP_LOG_FLAGS(0, "RSP_CODE_TASKMAN_FAILED\n"); | ||
4427 | ZFCP_LOG_NORMAL("bug: A reuested task management function " | 4226 | ZFCP_LOG_NORMAL("bug: A reuested task management function " |
4428 | "failed to complete successfully. " | 4227 | "failed to complete successfully. " |
4429 | "unit 0x%016Lx, port 0x%016Lx, adapter %s.\n", | 4228 | "unit 0x%016Lx, port 0x%016Lx, adapter %s.\n", |
@@ -4610,7 +4409,6 @@ zfcp_fsf_control_file_handler(struct zfcp_fsf_req *fsf_req) | |||
4610 | switch (header->fsf_status) { | 4409 | switch (header->fsf_status) { |
4611 | 4410 | ||
4612 | case FSF_GOOD: | 4411 | case FSF_GOOD: |
4613 | ZFCP_LOG_FLAGS(2, "FSF_GOOD\n"); | ||
4614 | ZFCP_LOG_NORMAL( | 4412 | ZFCP_LOG_NORMAL( |
4615 | "The FSF request has been successfully completed " | 4413 | "The FSF request has been successfully completed " |
4616 | "on the adapter %s\n", | 4414 | "on the adapter %s\n", |
@@ -4618,7 +4416,6 @@ zfcp_fsf_control_file_handler(struct zfcp_fsf_req *fsf_req) | |||
4618 | break; | 4416 | break; |
4619 | 4417 | ||
4620 | case FSF_OPERATION_PARTIALLY_SUCCESSFUL: | 4418 | case FSF_OPERATION_PARTIALLY_SUCCESSFUL: |
4621 | ZFCP_LOG_FLAGS(2, "FSF_OPERATION_PARTIALLY_SUCCESSFUL\n"); | ||
4622 | if (bottom->operation_subtype == FSF_CFDC_OPERATION_SUBTYPE) { | 4419 | if (bottom->operation_subtype == FSF_CFDC_OPERATION_SUBTYPE) { |
4623 | switch (header->fsf_status_qual.word[0]) { | 4420 | switch (header->fsf_status_qual.word[0]) { |
4624 | 4421 | ||
@@ -4655,7 +4452,6 @@ zfcp_fsf_control_file_handler(struct zfcp_fsf_req *fsf_req) | |||
4655 | break; | 4452 | break; |
4656 | 4453 | ||
4657 | case FSF_AUTHORIZATION_FAILURE: | 4454 | case FSF_AUTHORIZATION_FAILURE: |
4658 | ZFCP_LOG_FLAGS(2, "FSF_AUTHORIZATION_FAILURE\n"); | ||
4659 | ZFCP_LOG_NORMAL( | 4455 | ZFCP_LOG_NORMAL( |
4660 | "Adapter %s does not accept privileged commands\n", | 4456 | "Adapter %s does not accept privileged commands\n", |
4661 | zfcp_get_busid_by_adapter(adapter)); | 4457 | zfcp_get_busid_by_adapter(adapter)); |
@@ -4664,7 +4460,6 @@ zfcp_fsf_control_file_handler(struct zfcp_fsf_req *fsf_req) | |||
4664 | break; | 4460 | break; |
4665 | 4461 | ||
4666 | case FSF_CFDC_ERROR_DETECTED: | 4462 | case FSF_CFDC_ERROR_DETECTED: |
4667 | ZFCP_LOG_FLAGS(2, "FSF_CFDC_ERROR_DETECTED\n"); | ||
4668 | ZFCP_LOG_NORMAL( | 4463 | ZFCP_LOG_NORMAL( |
4669 | "Error at position %d in the CFDC, " | 4464 | "Error at position %d in the CFDC, " |
4670 | "CFDC is discarded by the adapter %s\n", | 4465 | "CFDC is discarded by the adapter %s\n", |
@@ -4675,7 +4470,6 @@ zfcp_fsf_control_file_handler(struct zfcp_fsf_req *fsf_req) | |||
4675 | break; | 4470 | break; |
4676 | 4471 | ||
4677 | case FSF_CONTROL_FILE_UPDATE_ERROR: | 4472 | case FSF_CONTROL_FILE_UPDATE_ERROR: |
4678 | ZFCP_LOG_FLAGS(2, "FSF_CONTROL_FILE_UPDATE_ERROR\n"); | ||
4679 | ZFCP_LOG_NORMAL( | 4473 | ZFCP_LOG_NORMAL( |
4680 | "Adapter %s cannot harden the control file, " | 4474 | "Adapter %s cannot harden the control file, " |
4681 | "file is discarded\n", | 4475 | "file is discarded\n", |
@@ -4685,7 +4479,6 @@ zfcp_fsf_control_file_handler(struct zfcp_fsf_req *fsf_req) | |||
4685 | break; | 4479 | break; |
4686 | 4480 | ||
4687 | case FSF_CONTROL_FILE_TOO_LARGE: | 4481 | case FSF_CONTROL_FILE_TOO_LARGE: |
4688 | ZFCP_LOG_FLAGS(2, "FSF_CONTROL_FILE_TOO_LARGE\n"); | ||
4689 | ZFCP_LOG_NORMAL( | 4482 | ZFCP_LOG_NORMAL( |
4690 | "Control file is too large, file is discarded " | 4483 | "Control file is too large, file is discarded " |
4691 | "by the adapter %s\n", | 4484 | "by the adapter %s\n", |
@@ -4695,7 +4488,6 @@ zfcp_fsf_control_file_handler(struct zfcp_fsf_req *fsf_req) | |||
4695 | break; | 4488 | break; |
4696 | 4489 | ||
4697 | case FSF_ACCESS_CONFLICT_DETECTED: | 4490 | case FSF_ACCESS_CONFLICT_DETECTED: |
4698 | ZFCP_LOG_FLAGS(2, "FSF_ACCESS_CONFLICT_DETECTED\n"); | ||
4699 | if (bottom->operation_subtype == FSF_CFDC_OPERATION_SUBTYPE) | 4491 | if (bottom->operation_subtype == FSF_CFDC_OPERATION_SUBTYPE) |
4700 | ZFCP_LOG_NORMAL( | 4492 | ZFCP_LOG_NORMAL( |
4701 | "CFDC has been discarded by the adapter %s, " | 4493 | "CFDC has been discarded by the adapter %s, " |
@@ -4708,7 +4500,6 @@ zfcp_fsf_control_file_handler(struct zfcp_fsf_req *fsf_req) | |||
4708 | break; | 4500 | break; |
4709 | 4501 | ||
4710 | case FSF_CONFLICTS_OVERRULED: | 4502 | case FSF_CONFLICTS_OVERRULED: |
4711 | ZFCP_LOG_FLAGS(2, "FSF_CONFLICTS_OVERRULED\n"); | ||
4712 | if (bottom->operation_subtype == FSF_CFDC_OPERATION_SUBTYPE) | 4503 | if (bottom->operation_subtype == FSF_CFDC_OPERATION_SUBTYPE) |
4713 | ZFCP_LOG_NORMAL( | 4504 | ZFCP_LOG_NORMAL( |
4714 | "CFDC has been activated on the adapter %s, " | 4505 | "CFDC has been activated on the adapter %s, " |
@@ -4721,7 +4512,6 @@ zfcp_fsf_control_file_handler(struct zfcp_fsf_req *fsf_req) | |||
4721 | break; | 4512 | break; |
4722 | 4513 | ||
4723 | case FSF_UNKNOWN_OP_SUBTYPE: | 4514 | case FSF_UNKNOWN_OP_SUBTYPE: |
4724 | ZFCP_LOG_FLAGS(2, "FSF_UNKNOWN_OP_SUBTYPE\n"); | ||
4725 | ZFCP_LOG_NORMAL("unknown operation subtype (adapter: %s, " | 4515 | ZFCP_LOG_NORMAL("unknown operation subtype (adapter: %s, " |
4726 | "op_subtype=0x%x)\n", | 4516 | "op_subtype=0x%x)\n", |
4727 | zfcp_get_busid_by_adapter(adapter), | 4517 | zfcp_get_busid_by_adapter(adapter), |
@@ -4731,7 +4521,6 @@ zfcp_fsf_control_file_handler(struct zfcp_fsf_req *fsf_req) | |||
4731 | break; | 4521 | break; |
4732 | 4522 | ||
4733 | case FSF_INVALID_COMMAND_OPTION: | 4523 | case FSF_INVALID_COMMAND_OPTION: |
4734 | ZFCP_LOG_FLAGS(2, "FSF_INVALID_COMMAND_OPTION\n"); | ||
4735 | ZFCP_LOG_NORMAL( | 4524 | ZFCP_LOG_NORMAL( |
4736 | "Invalid option 0x%x has been specified " | 4525 | "Invalid option 0x%x has been specified " |
4737 | "in QTCB bottom sent to the adapter %s\n", | 4526 | "in QTCB bottom sent to the adapter %s\n", |
@@ -4800,7 +4589,7 @@ zfcp_fsf_req_wait_and_cleanup(struct zfcp_fsf_req *fsf_req, | |||
4800 | *status = fsf_req->status; | 4589 | *status = fsf_req->status; |
4801 | 4590 | ||
4802 | /* cleanup request */ | 4591 | /* cleanup request */ |
4803 | zfcp_fsf_req_cleanup(fsf_req); | 4592 | zfcp_fsf_req_free(fsf_req); |
4804 | out: | 4593 | out: |
4805 | return retval; | 4594 | return retval; |
4806 | } | 4595 | } |
@@ -4999,9 +4788,9 @@ zfcp_fsf_req_send(struct zfcp_fsf_req *fsf_req, struct timer_list *timer) | |||
4999 | inc_seq_no = 0; | 4788 | inc_seq_no = 0; |
5000 | 4789 | ||
5001 | /* put allocated FSF request at list tail */ | 4790 | /* put allocated FSF request at list tail */ |
5002 | write_lock_irqsave(&adapter->fsf_req_list_lock, flags); | 4791 | spin_lock_irqsave(&adapter->fsf_req_list_lock, flags); |
5003 | list_add_tail(&fsf_req->list, &adapter->fsf_req_list_head); | 4792 | list_add_tail(&fsf_req->list, &adapter->fsf_req_list_head); |
5004 | write_unlock_irqrestore(&adapter->fsf_req_list_lock, flags); | 4793 | spin_unlock_irqrestore(&adapter->fsf_req_list_lock, flags); |
5005 | 4794 | ||
5006 | /* figure out expiration time of timeout and start timeout */ | 4795 | /* figure out expiration time of timeout and start timeout */ |
5007 | if (unlikely(timer)) { | 4796 | if (unlikely(timer)) { |
@@ -5045,9 +4834,9 @@ zfcp_fsf_req_send(struct zfcp_fsf_req *fsf_req, struct timer_list *timer) | |||
5045 | */ | 4834 | */ |
5046 | if (timer) | 4835 | if (timer) |
5047 | del_timer(timer); | 4836 | del_timer(timer); |
5048 | write_lock_irqsave(&adapter->fsf_req_list_lock, flags); | 4837 | spin_lock_irqsave(&adapter->fsf_req_list_lock, flags); |
5049 | list_del(&fsf_req->list); | 4838 | list_del(&fsf_req->list); |
5050 | write_unlock_irqrestore(&adapter->fsf_req_list_lock, flags); | 4839 | spin_unlock_irqrestore(&adapter->fsf_req_list_lock, flags); |
5051 | /* | 4840 | /* |
5052 | * adjust the number of free SBALs in request queue as well as | 4841 | * adjust the number of free SBALs in request queue as well as |
5053 | * position of first one | 4842 | * position of first one |
@@ -5085,25 +4874,4 @@ zfcp_fsf_req_send(struct zfcp_fsf_req *fsf_req, struct timer_list *timer) | |||
5085 | return retval; | 4874 | return retval; |
5086 | } | 4875 | } |
5087 | 4876 | ||
5088 | /* | ||
5089 | * function: zfcp_fsf_req_cleanup | ||
5090 | * | ||
5091 | * purpose: cleans up an FSF request and removes it from the specified list | ||
5092 | * | ||
5093 | * returns: | ||
5094 | * | ||
5095 | * assumption: no pending SB in SBALEs other than QTCB | ||
5096 | */ | ||
5097 | void | ||
5098 | zfcp_fsf_req_cleanup(struct zfcp_fsf_req *fsf_req) | ||
5099 | { | ||
5100 | struct zfcp_adapter *adapter = fsf_req->adapter; | ||
5101 | unsigned long flags; | ||
5102 | |||
5103 | write_lock_irqsave(&adapter->fsf_req_list_lock, flags); | ||
5104 | list_del(&fsf_req->list); | ||
5105 | write_unlock_irqrestore(&adapter->fsf_req_list_lock, flags); | ||
5106 | zfcp_fsf_req_free(fsf_req); | ||
5107 | } | ||
5108 | |||
5109 | #undef ZFCP_LOG_AREA | 4877 | #undef ZFCP_LOG_AREA |
diff --git a/drivers/s390/scsi/zfcp_qdio.c b/drivers/s390/scsi/zfcp_qdio.c index 06e862d7bc90..24e16ec331d9 100644 --- a/drivers/s390/scsi/zfcp_qdio.c +++ b/drivers/s390/scsi/zfcp_qdio.c | |||
@@ -229,52 +229,14 @@ zfcp_qdio_handler_error_check(struct zfcp_adapter *adapter, | |||
229 | ZFCP_LOG_TRACE("status is" | 229 | ZFCP_LOG_TRACE("status is" |
230 | " QDIO_STATUS_OUTBOUND_INT \n"); | 230 | " QDIO_STATUS_OUTBOUND_INT \n"); |
231 | } | 231 | } |
232 | } // if (ZFCP_LOG_CHECK(ZFCP_LOG_LEVEL_TRACE)) | 232 | } |
233 | if (unlikely(status & QDIO_STATUS_LOOK_FOR_ERROR)) { | 233 | if (unlikely(status & QDIO_STATUS_LOOK_FOR_ERROR)) { |
234 | retval = -EIO; | 234 | retval = -EIO; |
235 | 235 | ||
236 | ZFCP_LOG_FLAGS(1, "QDIO_STATUS_LOOK_FOR_ERROR \n"); | ||
237 | |||
238 | ZFCP_LOG_INFO("QDIO problem occurred (status=0x%x, " | 236 | ZFCP_LOG_INFO("QDIO problem occurred (status=0x%x, " |
239 | "qdio_error=0x%x, siga_error=0x%x)\n", | 237 | "qdio_error=0x%x, siga_error=0x%x)\n", |
240 | status, qdio_error, siga_error); | 238 | status, qdio_error, siga_error); |
241 | 239 | ||
242 | if (status & QDIO_STATUS_ACTIVATE_CHECK_CONDITION) { | ||
243 | ZFCP_LOG_FLAGS(2, | ||
244 | "QDIO_STATUS_ACTIVATE_CHECK_CONDITION\n"); | ||
245 | } | ||
246 | if (status & QDIO_STATUS_MORE_THAN_ONE_QDIO_ERROR) { | ||
247 | ZFCP_LOG_FLAGS(2, | ||
248 | "QDIO_STATUS_MORE_THAN_ONE_QDIO_ERROR\n"); | ||
249 | } | ||
250 | if (status & QDIO_STATUS_MORE_THAN_ONE_SIGA_ERROR) { | ||
251 | ZFCP_LOG_FLAGS(2, | ||
252 | "QDIO_STATUS_MORE_THAN_ONE_SIGA_ERROR\n"); | ||
253 | } | ||
254 | |||
255 | if (siga_error & QDIO_SIGA_ERROR_ACCESS_EXCEPTION) { | ||
256 | ZFCP_LOG_FLAGS(2, "QDIO_SIGA_ERROR_ACCESS_EXCEPTION\n"); | ||
257 | } | ||
258 | |||
259 | if (siga_error & QDIO_SIGA_ERROR_B_BIT_SET) { | ||
260 | ZFCP_LOG_FLAGS(2, "QDIO_SIGA_ERROR_B_BIT_SET\n"); | ||
261 | } | ||
262 | |||
263 | switch (qdio_error) { | ||
264 | case 0: | ||
265 | ZFCP_LOG_FLAGS(3, "QDIO_OK"); | ||
266 | break; | ||
267 | case SLSB_P_INPUT_ERROR: | ||
268 | ZFCP_LOG_FLAGS(1, "SLSB_P_INPUT_ERROR\n"); | ||
269 | break; | ||
270 | case SLSB_P_OUTPUT_ERROR: | ||
271 | ZFCP_LOG_FLAGS(1, "SLSB_P_OUTPUT_ERROR\n"); | ||
272 | break; | ||
273 | default: | ||
274 | ZFCP_LOG_NORMAL("bug: unknown QDIO error 0x%x\n", | ||
275 | qdio_error); | ||
276 | break; | ||
277 | } | ||
278 | /* Restarting IO on the failed adapter from scratch */ | 240 | /* Restarting IO on the failed adapter from scratch */ |
279 | debug_text_event(adapter->erp_dbf, 1, "qdio_err"); | 241 | debug_text_event(adapter->erp_dbf, 1, "qdio_err"); |
280 | /* | 242 | /* |
@@ -484,37 +446,37 @@ int | |||
484 | zfcp_qdio_reqid_check(struct zfcp_adapter *adapter, void *sbale_addr) | 446 | zfcp_qdio_reqid_check(struct zfcp_adapter *adapter, void *sbale_addr) |
485 | { | 447 | { |
486 | struct zfcp_fsf_req *fsf_req; | 448 | struct zfcp_fsf_req *fsf_req; |
487 | int retval = 0; | ||
488 | 449 | ||
489 | /* invalid (per convention used in this driver) */ | 450 | /* invalid (per convention used in this driver) */ |
490 | if (unlikely(!sbale_addr)) { | 451 | if (unlikely(!sbale_addr)) { |
491 | ZFCP_LOG_NORMAL("bug: invalid reqid\n"); | 452 | ZFCP_LOG_NORMAL("bug: invalid reqid\n"); |
492 | retval = -EINVAL; | 453 | return -EINVAL; |
493 | goto out; | ||
494 | } | 454 | } |
495 | 455 | ||
496 | /* valid request id and thus (hopefully :) valid fsf_req address */ | 456 | /* valid request id and thus (hopefully :) valid fsf_req address */ |
497 | fsf_req = (struct zfcp_fsf_req *) sbale_addr; | 457 | fsf_req = (struct zfcp_fsf_req *) sbale_addr; |
498 | 458 | ||
459 | /* serialize with zfcp_fsf_req_dismiss_all */ | ||
460 | spin_lock(&adapter->fsf_req_list_lock); | ||
461 | if (list_empty(&adapter->fsf_req_list_head)) { | ||
462 | spin_unlock(&adapter->fsf_req_list_lock); | ||
463 | return 0; | ||
464 | } | ||
465 | list_del(&fsf_req->list); | ||
466 | atomic_dec(&adapter->fsf_reqs_active); | ||
467 | spin_unlock(&adapter->fsf_req_list_lock); | ||
468 | |||
499 | if (unlikely(adapter != fsf_req->adapter)) { | 469 | if (unlikely(adapter != fsf_req->adapter)) { |
500 | ZFCP_LOG_NORMAL("bug: invalid reqid (fsf_req=%p, " | 470 | ZFCP_LOG_NORMAL("bug: invalid reqid (fsf_req=%p, " |
501 | "fsf_req->adapter=%p, adapter=%p)\n", | 471 | "fsf_req->adapter=%p, adapter=%p)\n", |
502 | fsf_req, fsf_req->adapter, adapter); | 472 | fsf_req, fsf_req->adapter, adapter); |
503 | retval = -EINVAL; | 473 | return -EINVAL; |
504 | goto out; | ||
505 | } | ||
506 | |||
507 | ZFCP_LOG_TRACE("fsf_req at %p, QTCB at %p\n", fsf_req, fsf_req->qtcb); | ||
508 | if (likely(fsf_req->qtcb)) { | ||
509 | ZFCP_LOG_TRACE("hex dump of QTCB:\n"); | ||
510 | ZFCP_HEX_DUMP(ZFCP_LOG_LEVEL_TRACE, (char *) fsf_req->qtcb, | ||
511 | sizeof(struct fsf_qtcb)); | ||
512 | } | 474 | } |
513 | 475 | ||
514 | /* finish the FSF request */ | 476 | /* finish the FSF request */ |
515 | zfcp_fsf_req_complete(fsf_req); | 477 | zfcp_fsf_req_complete(fsf_req); |
516 | out: | 478 | |
517 | return retval; | 479 | return 0; |
518 | } | 480 | } |
519 | 481 | ||
520 | /** | 482 | /** |
diff --git a/drivers/s390/scsi/zfcp_scsi.c b/drivers/s390/scsi/zfcp_scsi.c index e21b547fd427..6965992ddbbf 100644 --- a/drivers/s390/scsi/zfcp_scsi.c +++ b/drivers/s390/scsi/zfcp_scsi.c | |||
@@ -433,7 +433,7 @@ zfcp_port_lookup(struct zfcp_adapter *adapter, int channel, scsi_id_t id) | |||
433 | * FAILED - otherwise | 433 | * FAILED - otherwise |
434 | */ | 434 | */ |
435 | int | 435 | int |
436 | zfcp_scsi_eh_abort_handler(struct scsi_cmnd *scpnt) | 436 | __zfcp_scsi_eh_abort_handler(struct scsi_cmnd *scpnt) |
437 | { | 437 | { |
438 | int retval = SUCCESS; | 438 | int retval = SUCCESS; |
439 | struct zfcp_fsf_req *new_fsf_req, *old_fsf_req; | 439 | struct zfcp_fsf_req *new_fsf_req, *old_fsf_req; |
@@ -575,7 +575,7 @@ zfcp_scsi_eh_abort_handler(struct scsi_cmnd *scpnt) | |||
575 | *(u64 *) & new_fsf_req->qtcb->header.fsf_status_qual.word[0]; | 575 | *(u64 *) & new_fsf_req->qtcb->header.fsf_status_qual.word[0]; |
576 | dbf_fsf_qual[1] = | 576 | dbf_fsf_qual[1] = |
577 | *(u64 *) & new_fsf_req->qtcb->header.fsf_status_qual.word[2]; | 577 | *(u64 *) & new_fsf_req->qtcb->header.fsf_status_qual.word[2]; |
578 | zfcp_fsf_req_cleanup(new_fsf_req); | 578 | zfcp_fsf_req_free(new_fsf_req); |
579 | #else | 579 | #else |
580 | retval = zfcp_fsf_req_wait_and_cleanup(new_fsf_req, | 580 | retval = zfcp_fsf_req_wait_and_cleanup(new_fsf_req, |
581 | ZFCP_UNINTERRUPTIBLE, &status); | 581 | ZFCP_UNINTERRUPTIBLE, &status); |
@@ -611,6 +611,17 @@ zfcp_scsi_eh_abort_handler(struct scsi_cmnd *scpnt) | |||
611 | return retval; | 611 | return retval; |
612 | } | 612 | } |
613 | 613 | ||
614 | int | ||
615 | zfcp_scsi_eh_abort_handler(struct scsi_cmnd *scpnt) | ||
616 | { | ||
617 | int rc; | ||
618 | struct Scsi_Host *scsi_host = scpnt->device->host; | ||
619 | spin_lock_irq(scsi_host->host_lock); | ||
620 | rc = __zfcp_scsi_eh_abort_handler(scpnt); | ||
621 | spin_unlock_irq(scsi_host->host_lock); | ||
622 | return rc; | ||
623 | } | ||
624 | |||
614 | /* | 625 | /* |
615 | * function: zfcp_scsi_eh_device_reset_handler | 626 | * function: zfcp_scsi_eh_device_reset_handler |
616 | * | 627 | * |
@@ -625,8 +636,6 @@ zfcp_scsi_eh_device_reset_handler(struct scsi_cmnd *scpnt) | |||
625 | struct zfcp_unit *unit = (struct zfcp_unit *) scpnt->device->hostdata; | 636 | struct zfcp_unit *unit = (struct zfcp_unit *) scpnt->device->hostdata; |
626 | struct Scsi_Host *scsi_host = scpnt->device->host; | 637 | struct Scsi_Host *scsi_host = scpnt->device->host; |
627 | 638 | ||
628 | spin_unlock_irq(scsi_host->host_lock); | ||
629 | |||
630 | if (!unit) { | 639 | if (!unit) { |
631 | ZFCP_LOG_NORMAL("bug: Tried reset for nonexistent unit\n"); | 640 | ZFCP_LOG_NORMAL("bug: Tried reset for nonexistent unit\n"); |
632 | retval = SUCCESS; | 641 | retval = SUCCESS; |
@@ -669,7 +678,6 @@ zfcp_scsi_eh_device_reset_handler(struct scsi_cmnd *scpnt) | |||
669 | retval = SUCCESS; | 678 | retval = SUCCESS; |
670 | } | 679 | } |
671 | out: | 680 | out: |
672 | spin_lock_irq(scsi_host->host_lock); | ||
673 | return retval; | 681 | return retval; |
674 | } | 682 | } |
675 | 683 | ||
@@ -723,8 +731,6 @@ zfcp_scsi_eh_bus_reset_handler(struct scsi_cmnd *scpnt) | |||
723 | struct zfcp_unit *unit; | 731 | struct zfcp_unit *unit; |
724 | struct Scsi_Host *scsi_host = scpnt->device->host; | 732 | struct Scsi_Host *scsi_host = scpnt->device->host; |
725 | 733 | ||
726 | spin_unlock_irq(scsi_host->host_lock); | ||
727 | |||
728 | unit = (struct zfcp_unit *) scpnt->device->hostdata; | 734 | unit = (struct zfcp_unit *) scpnt->device->hostdata; |
729 | ZFCP_LOG_NORMAL("bus reset because of problems with " | 735 | ZFCP_LOG_NORMAL("bus reset because of problems with " |
730 | "unit 0x%016Lx\n", unit->fcp_lun); | 736 | "unit 0x%016Lx\n", unit->fcp_lun); |
@@ -732,7 +738,6 @@ zfcp_scsi_eh_bus_reset_handler(struct scsi_cmnd *scpnt) | |||
732 | zfcp_erp_wait(unit->port->adapter); | 738 | zfcp_erp_wait(unit->port->adapter); |
733 | retval = SUCCESS; | 739 | retval = SUCCESS; |
734 | 740 | ||
735 | spin_lock_irq(scsi_host->host_lock); | ||
736 | return retval; | 741 | return retval; |
737 | } | 742 | } |
738 | 743 | ||
@@ -750,8 +755,6 @@ zfcp_scsi_eh_host_reset_handler(struct scsi_cmnd *scpnt) | |||
750 | struct zfcp_unit *unit; | 755 | struct zfcp_unit *unit; |
751 | struct Scsi_Host *scsi_host = scpnt->device->host; | 756 | struct Scsi_Host *scsi_host = scpnt->device->host; |
752 | 757 | ||
753 | spin_unlock_irq(scsi_host->host_lock); | ||
754 | |||
755 | unit = (struct zfcp_unit *) scpnt->device->hostdata; | 758 | unit = (struct zfcp_unit *) scpnt->device->hostdata; |
756 | ZFCP_LOG_NORMAL("host reset because of problems with " | 759 | ZFCP_LOG_NORMAL("host reset because of problems with " |
757 | "unit 0x%016Lx\n", unit->fcp_lun); | 760 | "unit 0x%016Lx\n", unit->fcp_lun); |
@@ -759,7 +762,6 @@ zfcp_scsi_eh_host_reset_handler(struct scsi_cmnd *scpnt) | |||
759 | zfcp_erp_wait(unit->port->adapter); | 762 | zfcp_erp_wait(unit->port->adapter); |
760 | retval = SUCCESS; | 763 | retval = SUCCESS; |
761 | 764 | ||
762 | spin_lock_irq(scsi_host->host_lock); | ||
763 | return retval; | 765 | return retval; |
764 | } | 766 | } |
765 | 767 | ||