|
Daniel Wagner |
f39f25 |
From: Quinn Tran <qutran@marvell.com>
|
|
Daniel Wagner |
f39f25 |
Date: Mon, 6 Jun 2022 21:46:21 -0700
|
|
Daniel Wagner |
f39f25 |
Subject: scsi: qla2xxx: edif: Fix potential stuck session in sa update
|
|
Denis Kirjanov |
718367 |
Patch-mainline: v5.20-rc1
|
|
Daniel Wagner |
f39f25 |
Git-commit: e0fb8ce2bb9e52c846e54ad2c58b5b7beb13eb09
|
|
Daniel Wagner |
f39f25 |
References: bsc#1201958
|
|
Daniel Wagner |
f39f25 |
|
|
Daniel Wagner |
f39f25 |
When a thread is in the process of reestablish a session, a flag is set to
|
|
Daniel Wagner |
f39f25 |
prevent multiple threads/triggers from doing the same task. This flag was
|
|
Daniel Wagner |
f39f25 |
left on, and any attempt to relogin was locked out. Clear this flag if the
|
|
Daniel Wagner |
f39f25 |
attempt has failed.
|
|
Daniel Wagner |
f39f25 |
|
|
Daniel Wagner |
f39f25 |
Link: https://lore.kernel.org/r/20220607044627.19563-6-njavali@marvell.com
|
|
Daniel Wagner |
f39f25 |
Fixes: dd30706e73b7 ("scsi: qla2xxx: edif: Add key update")
|
|
Daniel Wagner |
f39f25 |
Signed-off-by: Quinn Tran <qutran@marvell.com>
|
|
Daniel Wagner |
f39f25 |
Signed-off-by: Nilesh Javali <njavali@marvell.com>
|
|
Daniel Wagner |
f39f25 |
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
|
|
Daniel Wagner |
f39f25 |
Acked-by: Daniel Wagner <dwagner@suse.de>
|
|
Daniel Wagner |
f39f25 |
---
|
|
Daniel Wagner |
f39f25 |
drivers/scsi/qla2xxx/qla_edif.c | 17 ++++++++++++++---
|
|
Daniel Wagner |
f39f25 |
1 file changed, 14 insertions(+), 3 deletions(-)
|
|
Daniel Wagner |
f39f25 |
|
|
Daniel Wagner |
f39f25 |
--- a/drivers/scsi/qla2xxx/qla_edif.c
|
|
Daniel Wagner |
f39f25 |
+++ b/drivers/scsi/qla2xxx/qla_edif.c
|
|
Daniel Wagner |
f39f25 |
@@ -2331,6 +2331,7 @@ edif_doorbell_show(struct device *dev, s
|
|
Daniel Wagner |
f39f25 |
|
|
Daniel Wagner |
f39f25 |
static void qla_noop_sp_done(srb_t *sp, int res)
|
|
Daniel Wagner |
f39f25 |
{
|
|
Daniel Wagner |
f39f25 |
+ sp->fcport->flags &= ~(FCF_ASYNC_SENT | FCF_ASYNC_ACTIVE);
|
|
Daniel Wagner |
f39f25 |
/* ref: INIT */
|
|
Daniel Wagner |
f39f25 |
kref_put(&sp->cmd_kref, qla2x00_sp_release);
|
|
Daniel Wagner |
f39f25 |
}
|
|
Daniel Wagner |
f39f25 |
@@ -2355,7 +2356,8 @@ qla24xx_issue_sa_replace_iocb(scsi_qla_h
|
|
Daniel Wagner |
f39f25 |
if (!sa_ctl) {
|
|
Daniel Wagner |
f39f25 |
ql_dbg(ql_dbg_edif, vha, 0x70e6,
|
|
Daniel Wagner |
f39f25 |
"sa_ctl allocation failed\n");
|
|
Daniel Wagner |
f39f25 |
- return -ENOMEM;
|
|
Daniel Wagner |
f39f25 |
+ rval = -ENOMEM;
|
|
Daniel Wagner |
f39f25 |
+ goto done;
|
|
Daniel Wagner |
f39f25 |
}
|
|
Daniel Wagner |
f39f25 |
|
|
Daniel Wagner |
f39f25 |
fcport = sa_ctl->fcport;
|
|
Daniel Wagner |
f39f25 |
@@ -2365,7 +2367,8 @@ qla24xx_issue_sa_replace_iocb(scsi_qla_h
|
|
Daniel Wagner |
f39f25 |
if (!sp) {
|
|
Daniel Wagner |
f39f25 |
ql_dbg(ql_dbg_edif, vha, 0x70e6,
|
|
Daniel Wagner |
f39f25 |
"SRB allocation failed\n");
|
|
Daniel Wagner |
f39f25 |
- return -ENOMEM;
|
|
Daniel Wagner |
f39f25 |
+ rval = -ENOMEM;
|
|
Daniel Wagner |
f39f25 |
+ goto done;
|
|
Daniel Wagner |
f39f25 |
}
|
|
Daniel Wagner |
f39f25 |
|
|
Daniel Wagner |
f39f25 |
fcport->flags |= FCF_ASYNC_SENT;
|
|
Daniel Wagner |
f39f25 |
@@ -2394,10 +2397,18 @@ qla24xx_issue_sa_replace_iocb(scsi_qla_h
|
|
Daniel Wagner |
f39f25 |
|
|
Daniel Wagner |
f39f25 |
rval = qla2x00_start_sp(sp);
|
|
Daniel Wagner |
f39f25 |
|
|
Daniel Wagner |
f39f25 |
- if (rval != QLA_SUCCESS)
|
|
Daniel Wagner |
f39f25 |
+ if (rval != QLA_SUCCESS) {
|
|
Daniel Wagner |
f39f25 |
rval = QLA_FUNCTION_FAILED;
|
|
Daniel Wagner |
f39f25 |
+ goto done_free_sp;
|
|
Daniel Wagner |
f39f25 |
+ }
|
|
Daniel Wagner |
f39f25 |
|
|
Daniel Wagner |
f39f25 |
return rval;
|
|
Daniel Wagner |
f39f25 |
+done_free_sp:
|
|
Daniel Wagner |
f39f25 |
+ kref_put(&sp->cmd_kref, qla2x00_sp_release);
|
|
Daniel Wagner |
f39f25 |
+ fcport->flags &= ~FCF_ASYNC_SENT;
|
|
Daniel Wagner |
f39f25 |
+done:
|
|
Daniel Wagner |
f39f25 |
+ fcport->flags &= ~FCF_ASYNC_ACTIVE;
|
|
Daniel Wagner |
f39f25 |
+ return rval;
|
|
Daniel Wagner |
f39f25 |
}
|
|
Daniel Wagner |
f39f25 |
|
|
Daniel Wagner |
f39f25 |
void qla24xx_sa_update_iocb(srb_t *sp, struct sa_update_28xx *sa_update_iocb)
|