lkml.org 
[lkml]   [2019]   [Nov]   [22]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH AUTOSEL 4.19 003/219] scsi: lpfc: Fix dif and first burst use in write commands
    Date
    From: James Smart <jsmart2021@gmail.com>

    [ Upstream commit 7c4042a4d0b7532cfbc90478fd3084b2dab5849e ]

    When dif and first burst is used in a write command wqe, the driver was not
    properly setting fields in the io command request. This resulted in no dif
    bytes being sent and invalid xfer_rdy's, resulting in the io being aborted
    by the hardware.

    Correct the wqe initializaton when both dif and first burst are used.

    Signed-off-by: Dick Kennedy <dick.kennedy@broadcom.com>
    Signed-off-by: James Smart <jsmart2021@gmail.com>
    Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    ---
    drivers/scsi/lpfc/lpfc_scsi.c | 18 ++++++++++++++++++
    1 file changed, 18 insertions(+)

    diff --git a/drivers/scsi/lpfc/lpfc_scsi.c b/drivers/scsi/lpfc/lpfc_scsi.c
    index 666495f21c246..425b83618a2e5 100644
    --- a/drivers/scsi/lpfc/lpfc_scsi.c
    +++ b/drivers/scsi/lpfc/lpfc_scsi.c
    @@ -2732,6 +2732,7 @@ lpfc_bg_scsi_prep_dma_buf_s3(struct lpfc_hba *phba,
    int datasegcnt, protsegcnt, datadir = scsi_cmnd->sc_data_direction;
    int prot_group_type = 0;
    int fcpdl;
    + struct lpfc_vport *vport = phba->pport;

    /*
    * Start the lpfc command prep by bumping the bpl beyond fcp_cmnd
    @@ -2837,6 +2838,14 @@ lpfc_bg_scsi_prep_dma_buf_s3(struct lpfc_hba *phba,
    */
    iocb_cmd->un.fcpi.fcpi_parm = fcpdl;

    + /*
    + * For First burst, we may need to adjust the initial transfer
    + * length for DIF
    + */
    + if (iocb_cmd->un.fcpi.fcpi_XRdy &&
    + (fcpdl < vport->cfg_first_burst_size))
    + iocb_cmd->un.fcpi.fcpi_XRdy = fcpdl;
    +
    return 0;
    err:
    if (lpfc_cmd->seg_cnt)
    @@ -3401,6 +3410,7 @@ lpfc_bg_scsi_prep_dma_buf_s4(struct lpfc_hba *phba,
    int datasegcnt, protsegcnt, datadir = scsi_cmnd->sc_data_direction;
    int prot_group_type = 0;
    int fcpdl;
    + struct lpfc_vport *vport = phba->pport;

    /*
    * Start the lpfc command prep by bumping the sgl beyond fcp_cmnd
    @@ -3516,6 +3526,14 @@ lpfc_bg_scsi_prep_dma_buf_s4(struct lpfc_hba *phba,
    */
    iocb_cmd->un.fcpi.fcpi_parm = fcpdl;

    + /*
    + * For First burst, we may need to adjust the initial transfer
    + * length for DIF
    + */
    + if (iocb_cmd->un.fcpi.fcpi_XRdy &&
    + (fcpdl < vport->cfg_first_burst_size))
    + iocb_cmd->un.fcpi.fcpi_XRdy = fcpdl;
    +
    /*
    * If the OAS driver feature is enabled and the lun is enabled for
    * OAS, set the oas iocb related flags.
    --
    2.20.1
    \
     
     \ /
      Last update: 2019-11-22 06:29    [W:3.618 / U:0.412 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site