diff options
author | Martin Peschke <mp3@de.ibm.com> | 2008-03-27 14:22:03 +0100 |
---|---|---|
committer | James Bottomley <James.Bottomley@HansenPartnership.com> | 2008-04-07 12:19:04 -0500 |
commit | 9467a9b3efdd9041202f71cc270bda827a7ec777 (patch) | |
tree | 9e7b8e167da9aa5065b1f7ed1d2a1ab9c2ad47da /drivers/s390/scsi/zfcp_aux.c | |
parent | 698ec01635819c5ae60090bb4efcbeffc41642fb (diff) |
[SCSI] zfcp: Trace all triggers of error recovery activity
This patch allows any recovery event to be traced back to an exact
cause, e.g. a particular request identified by an id (address).
Signed-off-by: Martin Peschke <mp3@de.ibm.com>
Signed-off-by: Christof Schmitt <christof.schmitt@de.ibm.com>
Signed-off-by: James Bottomley <James.Bottomley@HansenPartnership.com>
Diffstat (limited to 'drivers/s390/scsi/zfcp_aux.c')
-rw-r--r-- | drivers/s390/scsi/zfcp_aux.c | 31 |
1 files changed, 16 insertions, 15 deletions
diff --git a/drivers/s390/scsi/zfcp_aux.c b/drivers/s390/scsi/zfcp_aux.c index f3eff7ebcb6..d2a744200c9 100644 --- a/drivers/s390/scsi/zfcp_aux.c +++ b/drivers/s390/scsi/zfcp_aux.c @@ -1326,10 +1326,10 @@ zfcp_nameserver_enqueue(struct zfcp_adapter *adapter) #define ZFCP_LOG_AREA ZFCP_LOG_AREA_FC -static void -zfcp_fsf_incoming_els_rscn(struct zfcp_adapter *adapter, - struct fsf_status_read_buffer *status_buffer) +static void zfcp_fsf_incoming_els_rscn(struct zfcp_fsf_req *fsf_req) { + struct fsf_status_read_buffer *status_buffer = (void*)fsf_req->data; + struct zfcp_adapter *adapter = fsf_req->adapter; struct fcp_rscn_head *fcp_rscn_head; struct fcp_rscn_element *fcp_rscn_element; struct zfcp_port *port; @@ -1376,7 +1376,8 @@ zfcp_fsf_incoming_els_rscn(struct zfcp_adapter *adapter, ZFCP_LOG_INFO("incoming RSCN, trying to open " "port 0x%016Lx\n", port->wwpn); zfcp_erp_port_reopen(port, - ZFCP_STATUS_COMMON_ERP_FAILED); + ZFCP_STATUS_COMMON_ERP_FAILED, + 82, (u64)fsf_req); continue; } @@ -1407,10 +1408,10 @@ zfcp_fsf_incoming_els_rscn(struct zfcp_adapter *adapter, } } -static void -zfcp_fsf_incoming_els_plogi(struct zfcp_adapter *adapter, - struct fsf_status_read_buffer *status_buffer) +static void zfcp_fsf_incoming_els_plogi(struct zfcp_fsf_req *fsf_req) { + struct fsf_status_read_buffer *status_buffer = (void*)fsf_req->data; + struct zfcp_adapter *adapter = fsf_req->adapter; struct fsf_plogi *els_plogi; struct zfcp_port *port; unsigned long flags; @@ -1429,14 +1430,14 @@ zfcp_fsf_incoming_els_plogi(struct zfcp_adapter *adapter, status_buffer->d_id, zfcp_get_busid_by_adapter(adapter)); } else { - zfcp_erp_port_forced_reopen(port, 0); + zfcp_erp_port_forced_reopen(port, 0, 83, (u64)fsf_req); } } -static void -zfcp_fsf_incoming_els_logo(struct zfcp_adapter *adapter, - struct fsf_status_read_buffer *status_buffer) +static void zfcp_fsf_incoming_els_logo(struct zfcp_fsf_req *fsf_req) { + struct fsf_status_read_buffer *status_buffer = (void*)fsf_req->data; + struct zfcp_adapter *adapter = fsf_req->adapter; struct fcp_logo *els_logo = (struct fcp_logo *) status_buffer->payload; struct zfcp_port *port; unsigned long flags; @@ -1454,7 +1455,7 @@ zfcp_fsf_incoming_els_logo(struct zfcp_adapter *adapter, status_buffer->d_id, zfcp_get_busid_by_adapter(adapter)); } else { - zfcp_erp_port_forced_reopen(port, 0); + zfcp_erp_port_forced_reopen(port, 0, 84, (u64)fsf_req); } } @@ -1481,12 +1482,12 @@ zfcp_fsf_incoming_els(struct zfcp_fsf_req *fsf_req) zfcp_san_dbf_event_incoming_els(fsf_req); if (els_type == LS_PLOGI) - zfcp_fsf_incoming_els_plogi(adapter, status_buffer); + zfcp_fsf_incoming_els_plogi(fsf_req); else if (els_type == LS_LOGO) - zfcp_fsf_incoming_els_logo(adapter, status_buffer); + zfcp_fsf_incoming_els_logo(fsf_req); else if ((els_type & 0xffff0000) == LS_RSCN) /* we are only concerned with the command, not the length */ - zfcp_fsf_incoming_els_rscn(adapter, status_buffer); + zfcp_fsf_incoming_els_rscn(fsf_req); else zfcp_fsf_incoming_els_unknown(adapter, status_buffer); } |