Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 771bf035 authored by Steffen Maier's avatar Steffen Maier Committed by Martin K. Petersen
Browse files

zfcp: fix D_ID field with actual value on tracing SAN responses



With commit 2c55b750
("[SCSI] zfcp: Redesign of the debug tracing for SAN records.")
we lost the N_Port-ID where an ELS response comes from.
With commit 7c7dc196
("[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: default avatarSteffen Maier <maier@linux.vnet.ibm.com>
Fixes: 2c55b750 ("[SCSI] zfcp: Redesign of the debug tracing for SAN records.")
Fixes: 7c7dc196 ("[SCSI] zfcp: Simplify handling of ct and els requests")
Cc: <stable@vger.kernel.org> #2.6.38+
Reviewed-by: default avatarBenjamin Block <bblock@linux.vnet.ibm.com>
Reviewed-by: default avatarHannes Reinecke <hare@suse.com>
Signed-off-by: default avatarMartin K. Petersen <martin.petersen@oracle.com>
parent 7c964ffe
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -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);
	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);
}

/**
+2 −0
Original line number Diff line number Diff line
@@ -1079,6 +1079,7 @@ int zfcp_fsf_send_ct(struct zfcp_fc_wka_port *wka_port,

	req->handler = zfcp_fsf_send_ct_handler;
	req->qtcb->header.port_handle = wka_port->handle;
	ct->d_id = wka_port->d_id;
	req->data = ct;

	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);
	req->handler = zfcp_fsf_send_els_handler;
	els->d_id = d_id;
	req->data = els;

	zfcp_dbf_san_req("fssels1", req, d_id);
+3 −1
Original line number Diff line number Diff line
@@ -3,7 +3,7 @@
 *
 * Interface to the FSF support functions.
 *
 * Copyright IBM Corp. 2002, 2010
 * Copyright IBM Corp. 2002, 2015
 */

#ifndef FSF_H
@@ -436,6 +436,7 @@ struct zfcp_blk_drv_data {
 * @handler_data: data passed to handler function
 * @port: Optional pointer to port for zfcp internal ELS (only test link ADISC)
 * @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 scatterlist *req;
@@ -444,6 +445,7 @@ struct zfcp_fsf_ct_els {
	void *handler_data;
	struct zfcp_port *port;
	int status;
	u32 d_id;
};

#endif				/* FSF_H */