lkml.org 
[lkml]   [2019]   [Dec]   [16]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 5.3 137/180] scsi: qla2xxx: Do command completion on abort timeout
    Date
    From: Quinn Tran <qutran@marvell.com>

    [ Upstream commit 71c80b75ce8f08c0978ce9a9816b81b5c3ce5e12 ]

    On switch, fabric and mgt command timeout, driver send Abort to tell FW to
    return the original command. If abort is timeout, then return both Abort
    and original command for cleanup.

    Fixes: 219d27d7147e0 ("scsi: qla2xxx: Fix race conditions in the code for aborting SCSI commands")
    Cc: stable@vger.kernel.org # 5.2
    Link: https://lore.kernel.org/r/20191105150657.8092-3-hmadhani@marvell.com
    Reviewed-by: Ewan D. Milne <emilne@redhat.com>
    Signed-off-by: Quinn Tran <qutran@marvell.com>
    Signed-off-by: Himanshu Madhani <hmadhani@marvell.com>
    Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    ---
    drivers/scsi/qla2xxx/qla_def.h | 1 +
    drivers/scsi/qla2xxx/qla_init.c | 18 ++++++++++++++++++
    2 files changed, 19 insertions(+)

    diff --git a/drivers/scsi/qla2xxx/qla_def.h b/drivers/scsi/qla2xxx/qla_def.h
    index bb1c7b2d0ac1f..674ee2afe2b52 100644
    --- a/drivers/scsi/qla2xxx/qla_def.h
    +++ b/drivers/scsi/qla2xxx/qla_def.h
    @@ -543,6 +543,7 @@ typedef struct srb {
    const char *name;
    int iocbs;
    struct qla_qpair *qpair;
    + struct srb *cmd_sp;
    struct list_head elem;
    u32 gen1; /* scratch */
    u32 gen2; /* scratch */
    diff --git a/drivers/scsi/qla2xxx/qla_init.c b/drivers/scsi/qla2xxx/qla_init.c
    index 5df604fae7593..a75a40b14140a 100644
    --- a/drivers/scsi/qla2xxx/qla_init.c
    +++ b/drivers/scsi/qla2xxx/qla_init.c
    @@ -103,8 +103,22 @@ static void qla24xx_abort_iocb_timeout(void *data)
    u32 handle;
    unsigned long flags;

    + if (sp->cmd_sp)
    + ql_dbg(ql_dbg_async, sp->vha, 0x507c,
    + "Abort timeout - cmd hdl=%x, cmd type=%x hdl=%x, type=%x\n",
    + sp->cmd_sp->handle, sp->cmd_sp->type,
    + sp->handle, sp->type);
    + else
    + ql_dbg(ql_dbg_async, sp->vha, 0x507c,
    + "Abort timeout 2 - hdl=%x, type=%x\n",
    + sp->handle, sp->type);
    +
    spin_lock_irqsave(qpair->qp_lock_ptr, flags);
    for (handle = 1; handle < qpair->req->num_outstanding_cmds; handle++) {
    + if (sp->cmd_sp && (qpair->req->outstanding_cmds[handle] ==
    + sp->cmd_sp))
    + qpair->req->outstanding_cmds[handle] = NULL;
    +
    /* removing the abort */
    if (qpair->req->outstanding_cmds[handle] == sp) {
    qpair->req->outstanding_cmds[handle] = NULL;
    @@ -113,6 +127,9 @@ static void qla24xx_abort_iocb_timeout(void *data)
    }
    spin_unlock_irqrestore(qpair->qp_lock_ptr, flags);

    + if (sp->cmd_sp)
    + sp->cmd_sp->done(sp->cmd_sp, QLA_OS_TIMER_EXPIRED);
    +
    abt->u.abt.comp_status = CS_TIMEOUT;
    sp->done(sp, QLA_OS_TIMER_EXPIRED);
    }
    @@ -147,6 +164,7 @@ static int qla24xx_async_abort_cmd(srb_t *cmd_sp, bool wait)
    sp->type = SRB_ABT_CMD;
    sp->name = "abort";
    sp->qpair = cmd_sp->qpair;
    + sp->cmd_sp = cmd_sp;
    if (wait)
    sp->flags = SRB_WAKEUP_ON_COMP;

    --
    2.20.1


    \
     
     \ /
      Last update: 2019-12-16 19:31    [W:4.036 / U:0.556 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site