zfcp: fix D_ID field with actual value on tracing SAN responses
With commitsteinar/wifi_calib_4_9_kernel2c55b750a8
("[SCSI] zfcp: Redesign of the debug tracing for SAN records.") we lost the N_Port-ID where an ELS response comes from. With commit7c7dc19681
("[SCSI] zfcp: Simplify handling of ct and els requests") we lost the N_Port-ID where a CT response comes from. It's especially useful if the request SAN trace record with D_ID was already lost due to trace buffer wrap. GS uses an open WKA port handle and ELS just a D_ID, and only for ELS we could get D_ID from QTCB bottom via zfcp_fsf_req. To cover both cases, add a new field to zfcp_fsf_ct_els and fill it in on request to use in SAN response trace. Strictly speaking the D_ID on SAN response is the FC frame's S_ID. We don't need a field for the other end which is always us. Signed-off-by: Steffen Maier <maier@linux.vnet.ibm.com> Fixes:2c55b750a8
("[SCSI] zfcp: Redesign of the debug tracing for SAN records.") Fixes:7c7dc19681
("[SCSI] zfcp: Simplify handling of ct and els requests") Cc: <stable@vger.kernel.org> #2.6.38+ Reviewed-by: Benjamin Block <bblock@linux.vnet.ibm.com> Reviewed-by: Hannes Reinecke <hare@suse.com> Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
parent
7c964ffe58
commit
771bf03537
|
@ -407,7 +407,7 @@ void zfcp_dbf_san_res(char *tag, struct zfcp_fsf_req *fsf)
|
||||||
|
|
||||||
length = (u16)(ct_els->resp->length + FC_CT_HDR_LEN);
|
length = (u16)(ct_els->resp->length + FC_CT_HDR_LEN);
|
||||||
zfcp_dbf_san(tag, dbf, sg_virt(ct_els->resp), ZFCP_DBF_SAN_RES, length,
|
zfcp_dbf_san(tag, dbf, sg_virt(ct_els->resp), ZFCP_DBF_SAN_RES, length,
|
||||||
fsf->req_id, 0);
|
fsf->req_id, ct_els->d_id);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -1079,6 +1079,7 @@ int zfcp_fsf_send_ct(struct zfcp_fc_wka_port *wka_port,
|
||||||
|
|
||||||
req->handler = zfcp_fsf_send_ct_handler;
|
req->handler = zfcp_fsf_send_ct_handler;
|
||||||
req->qtcb->header.port_handle = wka_port->handle;
|
req->qtcb->header.port_handle = wka_port->handle;
|
||||||
|
ct->d_id = wka_port->d_id;
|
||||||
req->data = ct;
|
req->data = ct;
|
||||||
|
|
||||||
zfcp_dbf_san_req("fssct_1", req, wka_port->d_id);
|
zfcp_dbf_san_req("fssct_1", req, wka_port->d_id);
|
||||||
|
@ -1175,6 +1176,7 @@ int zfcp_fsf_send_els(struct zfcp_adapter *adapter, u32 d_id,
|
||||||
|
|
||||||
hton24(req->qtcb->bottom.support.d_id, d_id);
|
hton24(req->qtcb->bottom.support.d_id, d_id);
|
||||||
req->handler = zfcp_fsf_send_els_handler;
|
req->handler = zfcp_fsf_send_els_handler;
|
||||||
|
els->d_id = d_id;
|
||||||
req->data = els;
|
req->data = els;
|
||||||
|
|
||||||
zfcp_dbf_san_req("fssels1", req, d_id);
|
zfcp_dbf_san_req("fssels1", req, d_id);
|
||||||
|
|
|
@ -3,7 +3,7 @@
|
||||||
*
|
*
|
||||||
* Interface to the FSF support functions.
|
* Interface to the FSF support functions.
|
||||||
*
|
*
|
||||||
* Copyright IBM Corp. 2002, 2010
|
* Copyright IBM Corp. 2002, 2015
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef FSF_H
|
#ifndef FSF_H
|
||||||
|
@ -436,6 +436,7 @@ struct zfcp_blk_drv_data {
|
||||||
* @handler_data: data passed to handler function
|
* @handler_data: data passed to handler function
|
||||||
* @port: Optional pointer to port for zfcp internal ELS (only test link ADISC)
|
* @port: Optional pointer to port for zfcp internal ELS (only test link ADISC)
|
||||||
* @status: used to pass error status to calling function
|
* @status: used to pass error status to calling function
|
||||||
|
* @d_id: Destination ID of either open WKA port for CT or of D_ID for ELS
|
||||||
*/
|
*/
|
||||||
struct zfcp_fsf_ct_els {
|
struct zfcp_fsf_ct_els {
|
||||||
struct scatterlist *req;
|
struct scatterlist *req;
|
||||||
|
@ -444,6 +445,7 @@ struct zfcp_fsf_ct_els {
|
||||||
void *handler_data;
|
void *handler_data;
|
||||||
struct zfcp_port *port;
|
struct zfcp_port *port;
|
||||||
int status;
|
int status;
|
||||||
|
u32 d_id;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif /* FSF_H */
|
#endif /* FSF_H */
|
||||||
|
|
Loading…
Reference in New Issue