Skip to content

Commit 43cdde0

Browse files
steffen-maierZhengShunQian
authored andcommitted
scsi: zfcp: fix missing REC trigger trace on terminate_rport_io for ERP_FAILED
commit d70aab5 upstream. For problem determination we always want to see when we were invoked on the terminate_rport_io callback whether we perform something or not. Temporal event sequence of interest with a long fast_io_fail_tmo of 27 sec: loose remote port t workqueue [s] zfcp_q_<dev> IRQ zfcperp<dev> === ================== =================== ============================ 0 recv RSCN q p.test_link_work block rport start fast_io_fail_tmo send ADISC ELS 4 recv ADISC fail block zfcp_port port forced reopen send open port 12 recv open port fail q p.gid_pn_work zfcp_erp_wakeup (zfcp_erp_wait would return) GID_PN fail Before this point, we got a SCSI trace with tag "sctrpi1" on fast_io_fail, e.g. with the typical 5 sec setting. port.status |= ERP_FAILED If fast_io_fail_tmo triggers after this point, we missed a SCSI trace. workqueue fc_dl_<host> ================== 27 fc_timeout_fail_rport_io fc_terminate_rport_io zfcp_scsi_terminate_rport_io zfcp_erp_port_forced_reopen _zfcp_erp_port_forced_reopen if (port.status & ERP_FAILED) return; Therefore, write a trace before above early return. Example trace record formatted with zfcpdbf from s390-tools: Timestamp : ... Area : REC Subarea : 00 Level : 1 Exception : - CPU ID : .. Caller : 0x... Record ID : 1 ZFCP_DBF_REC_TRIG Tag : sctrpi1 SCSI terminate rport I/O LUN : 0xffffffffffffffff none (invalid) WWPN : 0x<wwpn> D_ID : 0x<n_port_id> Adapter status : 0x... Port status : 0x... LUN status : 0x00000000 none (invalid) Ready count : 0x... Running count : 0x... ERP want : 0x03 ZFCP_ERP_ACTION_REOPEN_PORT_FORCED ERP need : 0xe0 ZFCP_ERP_ACTION_FAILED Signed-off-by: Steffen Maier <maier@linux.ibm.com> Cc: <stable@vger.kernel.org> #2.6.38+ Reviewed-by: Benjamin Block <bblock@linux.ibm.com> Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
1 parent 94a7f73 commit 43cdde0

File tree

1 file changed

+11
-2
lines changed

1 file changed

+11
-2
lines changed

drivers/s390/scsi/zfcp_erp.c

+11-2
Original file line numberDiff line numberDiff line change
@@ -41,16 +41,21 @@ enum zfcp_erp_steps {
4141
* @ZFCP_ERP_ACTION_REOPEN_PORT_FORCED: Forced port recovery.
4242
* @ZFCP_ERP_ACTION_REOPEN_ADAPTER: Adapter recovery.
4343
* @ZFCP_ERP_ACTION_NONE: Eyecatcher pseudo flag to bitwise or-combine with
44-
* either of the other enum values.
44+
* either of the first four enum values.
4545
* Used to indicate that an ERP action could not be
4646
* set up despite a detected need for some recovery.
47+
* @ZFCP_ERP_ACTION_FAILED: Eyecatcher pseudo flag to bitwise or-combine with
48+
* either of the first four enum values.
49+
* Used to indicate that ERP not needed because
50+
* the object has ZFCP_STATUS_COMMON_ERP_FAILED.
4751
*/
4852
enum zfcp_erp_act_type {
4953
ZFCP_ERP_ACTION_REOPEN_LUN = 1,
5054
ZFCP_ERP_ACTION_REOPEN_PORT = 2,
5155
ZFCP_ERP_ACTION_REOPEN_PORT_FORCED = 3,
5256
ZFCP_ERP_ACTION_REOPEN_ADAPTER = 4,
5357
ZFCP_ERP_ACTION_NONE = 0xc0,
58+
ZFCP_ERP_ACTION_FAILED = 0xe0,
5459
};
5560

5661
enum zfcp_erp_act_state {
@@ -378,8 +383,12 @@ static void _zfcp_erp_port_forced_reopen(struct zfcp_port *port, int clear,
378383
zfcp_erp_port_block(port, clear);
379384
zfcp_scsi_schedule_rport_block(port);
380385

381-
if (atomic_read(&port->status) & ZFCP_STATUS_COMMON_ERP_FAILED)
386+
if (atomic_read(&port->status) & ZFCP_STATUS_COMMON_ERP_FAILED) {
387+
zfcp_dbf_rec_trig(id, port->adapter, port, NULL,
388+
ZFCP_ERP_ACTION_REOPEN_PORT_FORCED,
389+
ZFCP_ERP_ACTION_FAILED);
382390
return;
391+
}
383392

384393
zfcp_erp_action_enqueue(ZFCP_ERP_ACTION_REOPEN_PORT_FORCED,
385394
port->adapter, port, NULL, id, 0);

0 commit comments

Comments
 (0)