|
@@ -321,6 +321,38 @@ void zfcp_dbf_rec_run(char *tag, struct zfcp_erp_action *erp)
|
|
|
spin_unlock_irqrestore(&dbf->rec_lock, flags);
|
|
|
}
|
|
|
|
|
|
+/**
|
|
|
+ * zfcp_dbf_rec_run_wka - trace wka port event with info like running recovery
|
|
|
+ * @tag: identifier for event
|
|
|
+ * @wka_port: well known address port
|
|
|
+ * @req_id: request ID to correlate with potential HBA trace record
|
|
|
+ */
|
|
|
+void zfcp_dbf_rec_run_wka(char *tag, struct zfcp_fc_wka_port *wka_port,
|
|
|
+ u64 req_id)
|
|
|
+{
|
|
|
+ struct zfcp_dbf *dbf = wka_port->adapter->dbf;
|
|
|
+ struct zfcp_dbf_rec *rec = &dbf->rec_buf;
|
|
|
+ unsigned long flags;
|
|
|
+
|
|
|
+ spin_lock_irqsave(&dbf->rec_lock, flags);
|
|
|
+ memset(rec, 0, sizeof(*rec));
|
|
|
+
|
|
|
+ rec->id = ZFCP_DBF_REC_RUN;
|
|
|
+ memcpy(rec->tag, tag, ZFCP_DBF_TAG_LEN);
|
|
|
+ rec->port_status = wka_port->status;
|
|
|
+ rec->d_id = wka_port->d_id;
|
|
|
+ rec->lun = ZFCP_DBF_INVALID_LUN;
|
|
|
+
|
|
|
+ rec->u.run.fsf_req_id = req_id;
|
|
|
+ rec->u.run.rec_status = ~0;
|
|
|
+ rec->u.run.rec_step = ~0;
|
|
|
+ rec->u.run.rec_action = ~0;
|
|
|
+ rec->u.run.rec_count = ~0;
|
|
|
+
|
|
|
+ debug_event(dbf->rec, 1, rec, sizeof(*rec));
|
|
|
+ spin_unlock_irqrestore(&dbf->rec_lock, flags);
|
|
|
+}
|
|
|
+
|
|
|
static inline
|
|
|
void zfcp_dbf_san(char *tag, struct zfcp_dbf *dbf, void *data, u8 id, u16 len,
|
|
|
u64 req_id, u32 d_id)
|