|
Daniel Wagner |
5b8a17 |
From: Quinn Tran <qutran@marvell.com>
|
|
Daniel Wagner |
5b8a17 |
Date: Wed, 8 Jun 2022 04:58:41 -0700
|
|
Daniel Wagner |
5b8a17 |
Subject: scsi: qla2xxx: edif: Send LOGO for unexpected IKE message
|
|
Denis Kirjanov |
718367 |
Patch-mainline: v5.20-rc1
|
|
Daniel Wagner |
5b8a17 |
Git-commit: 2b659ed67a12f39f56d8dcad9b5d5a74d67c01b3
|
|
Daniel Wagner |
5b8a17 |
References: bsc#1201958
|
|
Daniel Wagner |
5b8a17 |
|
|
Daniel Wagner |
5b8a17 |
If the session is down and the local port continues to receive AUTH ELS
|
|
Daniel Wagner |
5b8a17 |
messages, the driver needs to send back LOGO so that the remote device
|
|
Daniel Wagner |
5b8a17 |
knows to tear down its session. Terminate and clean up the AUTH ELS
|
|
Daniel Wagner |
5b8a17 |
exchange followed by a passthrough LOGO.
|
|
Daniel Wagner |
5b8a17 |
|
|
Daniel Wagner |
5b8a17 |
Link: https://lore.kernel.org/r/20220608115849.16693-3-njavali@marvell.com
|
|
Daniel Wagner |
5b8a17 |
Fixes: 225479296c4f ("scsi: qla2xxx: edif: Reject AUTH ELS on session down")
|
|
Daniel Wagner |
5b8a17 |
Reviewed-by: Himanshu Madhani <himanshu.madhani@oracle.com>
|
|
Daniel Wagner |
5b8a17 |
Signed-off-by: Quinn Tran <qutran@marvell.com>
|
|
Daniel Wagner |
5b8a17 |
Signed-off-by: Nilesh Javali <njavali@marvell.com>
|
|
Daniel Wagner |
5b8a17 |
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
|
|
Daniel Wagner |
5b8a17 |
Acked-by: Daniel Wagner <dwagner@suse.de>
|
|
Daniel Wagner |
5b8a17 |
---
|
|
Daniel Wagner |
5b8a17 |
drivers/scsi/qla2xxx/qla_edif.c | 19 +++++++++++++++++--
|
|
Daniel Wagner |
5b8a17 |
drivers/scsi/qla2xxx/qla_fw.h | 2 +-
|
|
Daniel Wagner |
5b8a17 |
2 files changed, 18 insertions(+), 3 deletions(-)
|
|
Daniel Wagner |
5b8a17 |
|
|
Daniel Wagner |
5b8a17 |
--- a/drivers/scsi/qla2xxx/qla_edif.c
|
|
Daniel Wagner |
5b8a17 |
+++ b/drivers/scsi/qla2xxx/qla_edif.c
|
|
Daniel Wagner |
5b8a17 |
@@ -2565,8 +2565,7 @@ void qla24xx_auth_els(scsi_qla_host_t *v
|
|
Daniel Wagner |
5b8a17 |
|
|
Daniel Wagner |
5b8a17 |
fcport = qla2x00_find_fcport_by_pid(host, &purex->pur_info.pur_sid);
|
|
Daniel Wagner |
5b8a17 |
|
|
Daniel Wagner |
5b8a17 |
- if (DBELL_INACTIVE(vha) ||
|
|
Daniel Wagner |
5b8a17 |
- (fcport && EDIF_SESSION_DOWN(fcport))) {
|
|
Daniel Wagner |
5b8a17 |
+ if (DBELL_INACTIVE(vha)) {
|
|
Daniel Wagner |
5b8a17 |
ql_dbg(ql_dbg_edif, host, 0x0910c, "%s e_dbell.db_flags =%x %06x\n",
|
|
Daniel Wagner |
5b8a17 |
__func__, host->e_dbell.db_flags,
|
|
Daniel Wagner |
5b8a17 |
fcport ? fcport->d_id.b24 : 0);
|
|
Daniel Wagner |
5b8a17 |
@@ -2576,6 +2575,22 @@ void qla24xx_auth_els(scsi_qla_host_t *v
|
|
Daniel Wagner |
5b8a17 |
return;
|
|
Daniel Wagner |
5b8a17 |
}
|
|
Daniel Wagner |
5b8a17 |
|
|
Daniel Wagner |
5b8a17 |
+ if (fcport && EDIF_SESSION_DOWN(fcport)) {
|
|
Daniel Wagner |
5b8a17 |
+ ql_dbg(ql_dbg_edif, host, 0x13b6,
|
|
Daniel Wagner |
5b8a17 |
+ "%s terminate exchange. Send logo to 0x%x\n",
|
|
Daniel Wagner |
5b8a17 |
+ __func__, a.did.b24);
|
|
Daniel Wagner |
5b8a17 |
+
|
|
Daniel Wagner |
5b8a17 |
+ a.tx_byte_count = a.tx_len = 0;
|
|
Daniel Wagner |
5b8a17 |
+ a.tx_addr = 0;
|
|
Daniel Wagner |
5b8a17 |
+ a.control_flags = EPD_RX_XCHG; /* EPD_RX_XCHG = terminate cmd */
|
|
Daniel Wagner |
5b8a17 |
+ qla_els_reject_iocb(host, (*rsp)->qpair, &a);
|
|
Daniel Wagner |
5b8a17 |
+ qla_enode_free(host, ptr);
|
|
Daniel Wagner |
5b8a17 |
+ /* send logo to let remote port knows to tear down session */
|
|
Daniel Wagner |
5b8a17 |
+ fcport->send_els_logo = 1;
|
|
Daniel Wagner |
5b8a17 |
+ qlt_schedule_sess_for_deletion(fcport);
|
|
Daniel Wagner |
5b8a17 |
+ return;
|
|
Daniel Wagner |
5b8a17 |
+ }
|
|
Daniel Wagner |
5b8a17 |
+
|
|
Daniel Wagner |
5b8a17 |
/* add the local enode to the list */
|
|
Daniel Wagner |
5b8a17 |
qla_enode_add(host, ptr);
|
|
Daniel Wagner |
5b8a17 |
|
|
Daniel Wagner |
5b8a17 |
--- a/drivers/scsi/qla2xxx/qla_fw.h
|
|
Daniel Wagner |
5b8a17 |
+++ b/drivers/scsi/qla2xxx/qla_fw.h
|
|
Daniel Wagner |
5b8a17 |
@@ -808,7 +808,7 @@ struct els_entry_24xx {
|
|
Daniel Wagner |
5b8a17 |
#define EPD_ELS_COMMAND (0 << 13)
|
|
Daniel Wagner |
5b8a17 |
#define EPD_ELS_ACC (1 << 13)
|
|
Daniel Wagner |
5b8a17 |
#define EPD_ELS_RJT (2 << 13)
|
|
Daniel Wagner |
5b8a17 |
-#define EPD_RX_XCHG (3 << 13)
|
|
Daniel Wagner |
5b8a17 |
+#define EPD_RX_XCHG (3 << 13) /* terminate exchange */
|
|
Daniel Wagner |
5b8a17 |
#define ECF_CLR_PASSTHRU_PEND BIT_12
|
|
Daniel Wagner |
5b8a17 |
#define ECF_INCL_FRAME_HDR BIT_11
|
|
Daniel Wagner |
5b8a17 |
#define ECF_SEC_LOGIN BIT_3
|