lkml.org 
[lkml]   [2022]   [Aug]   [15]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 5.18 0551/1095] scsi: qla2xxx: edif: Fix potential stuck session in sa update
    Date
    From: Quinn Tran <qutran@marvell.com>

    [ Upstream commit e0fb8ce2bb9e52c846e54ad2c58b5b7beb13eb09 ]

    When a thread is in the process of reestablish a session, a flag is set to
    prevent multiple threads/triggers from doing the same task. This flag was
    left on, and any attempt to relogin was locked out. Clear this flag if the
    attempt has failed.

    Link: https://lore.kernel.org/r/20220607044627.19563-6-njavali@marvell.com
    Fixes: dd30706e73b7 ("scsi: qla2xxx: edif: Add key update")
    Signed-off-by: Quinn Tran <qutran@marvell.com>
    Signed-off-by: Nilesh Javali <njavali@marvell.com>
    Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    ---
    drivers/scsi/qla2xxx/qla_edif.c | 17 ++++++++++++++---
    1 file changed, 14 insertions(+), 3 deletions(-)

    diff --git a/drivers/scsi/qla2xxx/qla_edif.c b/drivers/scsi/qla2xxx/qla_edif.c
    index d9e3f145b162..166647d4ab27 100644
    --- a/drivers/scsi/qla2xxx/qla_edif.c
    +++ b/drivers/scsi/qla2xxx/qla_edif.c
    @@ -2332,6 +2332,7 @@ edif_doorbell_show(struct device *dev, struct device_attribute *attr,

    static void qla_noop_sp_done(srb_t *sp, int res)
    {
    + sp->fcport->flags &= ~(FCF_ASYNC_SENT | FCF_ASYNC_ACTIVE);
    /* ref: INIT */
    kref_put(&sp->cmd_kref, qla2x00_sp_release);
    }
    @@ -2356,7 +2357,8 @@ qla24xx_issue_sa_replace_iocb(scsi_qla_host_t *vha, struct qla_work_evt *e)
    if (!sa_ctl) {
    ql_dbg(ql_dbg_edif, vha, 0x70e6,
    "sa_ctl allocation failed\n");
    - return -ENOMEM;
    + rval = -ENOMEM;
    + goto done;
    }

    fcport = sa_ctl->fcport;
    @@ -2366,7 +2368,8 @@ qla24xx_issue_sa_replace_iocb(scsi_qla_host_t *vha, struct qla_work_evt *e)
    if (!sp) {
    ql_dbg(ql_dbg_edif, vha, 0x70e6,
    "SRB allocation failed\n");
    - return -ENOMEM;
    + rval = -ENOMEM;
    + goto done;
    }

    fcport->flags |= FCF_ASYNC_SENT;
    @@ -2395,9 +2398,17 @@ qla24xx_issue_sa_replace_iocb(scsi_qla_host_t *vha, struct qla_work_evt *e)

    rval = qla2x00_start_sp(sp);

    - if (rval != QLA_SUCCESS)
    + if (rval != QLA_SUCCESS) {
    rval = QLA_FUNCTION_FAILED;
    + goto done_free_sp;
    + }

    + return rval;
    +done_free_sp:
    + kref_put(&sp->cmd_kref, qla2x00_sp_release);
    + fcport->flags &= ~FCF_ASYNC_SENT;
    +done:
    + fcport->flags &= ~FCF_ASYNC_ACTIVE;
    return rval;
    }

    --
    2.35.1


    \
     
     \ /
      Last update: 2022-08-15 23:30    [W:2.299 / U:0.684 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site