mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-10-09 01:59:41 +00:00
scsi: lpfc: Fix dif and first burst use in write commands
[ Upstream commit 7c4042a4d0
]
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
20feb73330
commit
ee6d2bedb4
1 changed files with 18 additions and 0 deletions
|
@ -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.
|
||||
|
|
Loading…
Reference in a new issue