mirror of
https://github.com/rd-stuffs/msm-4.14.git
synced 2025-02-20 11:45:48 +08:00
scsi: lpfc: Fix dif and first burst use in write commands
[ 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>
This commit is contained in:
parent
2e0c82241c
commit
78f7d2dbdf
@ -2714,6 +2714,7 @@ lpfc_bg_scsi_prep_dma_buf_s3(struct lpfc_hba *phba,
|
|||||||
int datasegcnt, protsegcnt, datadir = scsi_cmnd->sc_data_direction;
|
int datasegcnt, protsegcnt, datadir = scsi_cmnd->sc_data_direction;
|
||||||
int prot_group_type = 0;
|
int prot_group_type = 0;
|
||||||
int fcpdl;
|
int fcpdl;
|
||||||
|
struct lpfc_vport *vport = phba->pport;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Start the lpfc command prep by bumping the bpl beyond fcp_cmnd
|
* Start the lpfc command prep by bumping the bpl beyond fcp_cmnd
|
||||||
@ -2819,6 +2820,14 @@ lpfc_bg_scsi_prep_dma_buf_s3(struct lpfc_hba *phba,
|
|||||||
*/
|
*/
|
||||||
iocb_cmd->un.fcpi.fcpi_parm = fcpdl;
|
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;
|
return 0;
|
||||||
err:
|
err:
|
||||||
if (lpfc_cmd->seg_cnt)
|
if (lpfc_cmd->seg_cnt)
|
||||||
@ -3371,6 +3380,7 @@ lpfc_bg_scsi_prep_dma_buf_s4(struct lpfc_hba *phba,
|
|||||||
int datasegcnt, protsegcnt, datadir = scsi_cmnd->sc_data_direction;
|
int datasegcnt, protsegcnt, datadir = scsi_cmnd->sc_data_direction;
|
||||||
int prot_group_type = 0;
|
int prot_group_type = 0;
|
||||||
int fcpdl;
|
int fcpdl;
|
||||||
|
struct lpfc_vport *vport = phba->pport;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Start the lpfc command prep by bumping the sgl beyond fcp_cmnd
|
* Start the lpfc command prep by bumping the sgl beyond fcp_cmnd
|
||||||
@ -3486,6 +3496,14 @@ lpfc_bg_scsi_prep_dma_buf_s4(struct lpfc_hba *phba,
|
|||||||
*/
|
*/
|
||||||
iocb_cmd->un.fcpi.fcpi_parm = fcpdl;
|
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
|
* If the OAS driver feature is enabled and the lun is enabled for
|
||||||
* OAS, set the oas iocb related flags.
|
* OAS, set the oas iocb related flags.
|
||||||
|
Loading…
x
Reference in New Issue
Block a user