scsi: lpfc: Remove reftag check in DIF paths
When preparing protection DIF I/O for DMA, the driver obtains reference tags from scsi_prot_ref_tag(). Previously, there was a wrong assumption that an all 0xffffffff value meant error and thus the driver failed the I/O. This patch removes the evaluation code and accepts whatever the upper layer returns. Signed-off-by: Justin Tee <justin.tee@broadcom.com> Link: https://lore.kernel.org/r/20230803211932.155745-1-justintee8345@gmail.com Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
This commit is contained in:
committed by
Martin K. Petersen
parent
b6d128f89a
commit
8eebf0e84f
@@ -109,8 +109,6 @@ lpfc_sli4_set_rsp_sgl_last(struct lpfc_hba *phba,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#define LPFC_INVALID_REFTAG ((u32)-1)
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* lpfc_rampdown_queue_depth - Post RAMP_DOWN_QUEUE event to worker thread
|
* lpfc_rampdown_queue_depth - Post RAMP_DOWN_QUEUE event to worker thread
|
||||||
* @phba: The Hba for which this call is being executed.
|
* @phba: The Hba for which this call is being executed.
|
||||||
@@ -978,8 +976,6 @@ lpfc_bg_err_inject(struct lpfc_hba *phba, struct scsi_cmnd *sc,
|
|||||||
|
|
||||||
sgpe = scsi_prot_sglist(sc);
|
sgpe = scsi_prot_sglist(sc);
|
||||||
lba = scsi_prot_ref_tag(sc);
|
lba = scsi_prot_ref_tag(sc);
|
||||||
if (lba == LPFC_INVALID_REFTAG)
|
|
||||||
return 0;
|
|
||||||
|
|
||||||
/* First check if we need to match the LBA */
|
/* First check if we need to match the LBA */
|
||||||
if (phba->lpfc_injerr_lba != LPFC_INJERR_LBA_OFF) {
|
if (phba->lpfc_injerr_lba != LPFC_INJERR_LBA_OFF) {
|
||||||
@@ -1560,8 +1556,6 @@ lpfc_bg_setup_bpl(struct lpfc_hba *phba, struct scsi_cmnd *sc,
|
|||||||
|
|
||||||
/* extract some info from the scsi command for pde*/
|
/* extract some info from the scsi command for pde*/
|
||||||
reftag = scsi_prot_ref_tag(sc);
|
reftag = scsi_prot_ref_tag(sc);
|
||||||
if (reftag == LPFC_INVALID_REFTAG)
|
|
||||||
goto out;
|
|
||||||
|
|
||||||
#ifdef CONFIG_SCSI_LPFC_DEBUG_FS
|
#ifdef CONFIG_SCSI_LPFC_DEBUG_FS
|
||||||
rc = lpfc_bg_err_inject(phba, sc, &reftag, NULL, 1);
|
rc = lpfc_bg_err_inject(phba, sc, &reftag, NULL, 1);
|
||||||
@@ -1723,8 +1717,6 @@ lpfc_bg_setup_bpl_prot(struct lpfc_hba *phba, struct scsi_cmnd *sc,
|
|||||||
/* extract some info from the scsi command */
|
/* extract some info from the scsi command */
|
||||||
blksize = scsi_prot_interval(sc);
|
blksize = scsi_prot_interval(sc);
|
||||||
reftag = scsi_prot_ref_tag(sc);
|
reftag = scsi_prot_ref_tag(sc);
|
||||||
if (reftag == LPFC_INVALID_REFTAG)
|
|
||||||
goto out;
|
|
||||||
|
|
||||||
#ifdef CONFIG_SCSI_LPFC_DEBUG_FS
|
#ifdef CONFIG_SCSI_LPFC_DEBUG_FS
|
||||||
rc = lpfc_bg_err_inject(phba, sc, &reftag, NULL, 1);
|
rc = lpfc_bg_err_inject(phba, sc, &reftag, NULL, 1);
|
||||||
@@ -1953,8 +1945,6 @@ lpfc_bg_setup_sgl(struct lpfc_hba *phba, struct scsi_cmnd *sc,
|
|||||||
|
|
||||||
/* extract some info from the scsi command for pde*/
|
/* extract some info from the scsi command for pde*/
|
||||||
reftag = scsi_prot_ref_tag(sc);
|
reftag = scsi_prot_ref_tag(sc);
|
||||||
if (reftag == LPFC_INVALID_REFTAG)
|
|
||||||
goto out;
|
|
||||||
|
|
||||||
#ifdef CONFIG_SCSI_LPFC_DEBUG_FS
|
#ifdef CONFIG_SCSI_LPFC_DEBUG_FS
|
||||||
rc = lpfc_bg_err_inject(phba, sc, &reftag, NULL, 1);
|
rc = lpfc_bg_err_inject(phba, sc, &reftag, NULL, 1);
|
||||||
@@ -2154,8 +2144,6 @@ lpfc_bg_setup_sgl_prot(struct lpfc_hba *phba, struct scsi_cmnd *sc,
|
|||||||
/* extract some info from the scsi command */
|
/* extract some info from the scsi command */
|
||||||
blksize = scsi_prot_interval(sc);
|
blksize = scsi_prot_interval(sc);
|
||||||
reftag = scsi_prot_ref_tag(sc);
|
reftag = scsi_prot_ref_tag(sc);
|
||||||
if (reftag == LPFC_INVALID_REFTAG)
|
|
||||||
goto out;
|
|
||||||
|
|
||||||
#ifdef CONFIG_SCSI_LPFC_DEBUG_FS
|
#ifdef CONFIG_SCSI_LPFC_DEBUG_FS
|
||||||
rc = lpfc_bg_err_inject(phba, sc, &reftag, NULL, 1);
|
rc = lpfc_bg_err_inject(phba, sc, &reftag, NULL, 1);
|
||||||
@@ -2746,8 +2734,6 @@ lpfc_calc_bg_err(struct lpfc_hba *phba, struct lpfc_io_buf *lpfc_cmd)
|
|||||||
|
|
||||||
src = (struct scsi_dif_tuple *)sg_virt(sgpe);
|
src = (struct scsi_dif_tuple *)sg_virt(sgpe);
|
||||||
start_ref_tag = scsi_prot_ref_tag(cmd);
|
start_ref_tag = scsi_prot_ref_tag(cmd);
|
||||||
if (start_ref_tag == LPFC_INVALID_REFTAG)
|
|
||||||
goto out;
|
|
||||||
start_app_tag = src->app_tag;
|
start_app_tag = src->app_tag;
|
||||||
len = sgpe->length;
|
len = sgpe->length;
|
||||||
while (src && protsegcnt) {
|
while (src && protsegcnt) {
|
||||||
@@ -3493,11 +3479,11 @@ err:
|
|||||||
scsi_cmnd->sc_data_direction);
|
scsi_cmnd->sc_data_direction);
|
||||||
|
|
||||||
lpfc_printf_log(phba, KERN_ERR, LOG_TRACE_EVENT,
|
lpfc_printf_log(phba, KERN_ERR, LOG_TRACE_EVENT,
|
||||||
"9084 Cannot setup S/G List for HBA"
|
"9084 Cannot setup S/G List for HBA "
|
||||||
"IO segs %d/%d SGL %d SCSI %d: %d %d\n",
|
"IO segs %d/%d SGL %d SCSI %d: %d %d %d\n",
|
||||||
lpfc_cmd->seg_cnt, lpfc_cmd->prot_seg_cnt,
|
lpfc_cmd->seg_cnt, lpfc_cmd->prot_seg_cnt,
|
||||||
phba->cfg_total_seg_cnt, phba->cfg_sg_seg_cnt,
|
phba->cfg_total_seg_cnt, phba->cfg_sg_seg_cnt,
|
||||||
prot_group_type, num_sge);
|
prot_group_type, num_sge, ret);
|
||||||
|
|
||||||
lpfc_cmd->seg_cnt = 0;
|
lpfc_cmd->seg_cnt = 0;
|
||||||
lpfc_cmd->prot_seg_cnt = 0;
|
lpfc_cmd->prot_seg_cnt = 0;
|
||||||
|
Reference in New Issue
Block a user