|
@@ -297,8 +297,10 @@ lpfc_handle_fcp_err(struct lpfc_scsi_buf *lpfc_cmd)
|
|
|
uint32_t fcpi_parm = lpfc_cmd->cur_iocbq.iocb.un.fcpi.fcpi_parm;
|
|
|
uint32_t resp_info = fcprsp->rspStatus2;
|
|
|
uint32_t scsi_status = fcprsp->rspStatus3;
|
|
|
+ uint32_t *lp;
|
|
|
uint32_t host_status = DID_OK;
|
|
|
uint32_t rsplen = 0;
|
|
|
+ uint32_t logit = LOG_FCP | LOG_FCP_ERROR;
|
|
|
|
|
|
/*
|
|
|
* If this is a task management command, there is no
|
|
@@ -310,10 +312,25 @@ lpfc_handle_fcp_err(struct lpfc_scsi_buf *lpfc_cmd)
|
|
|
goto out;
|
|
|
}
|
|
|
|
|
|
- lpfc_printf_log(phba, KERN_WARNING, LOG_FCP,
|
|
|
- "%d:0730 FCP command failed: RSP "
|
|
|
- "Data: x%x x%x x%x x%x x%x x%x\n",
|
|
|
- phba->brd_no, resp_info, scsi_status,
|
|
|
+ if ((resp_info & SNS_LEN_VALID) && fcprsp->rspSnsLen) {
|
|
|
+ uint32_t snslen = be32_to_cpu(fcprsp->rspSnsLen);
|
|
|
+ if (snslen > SCSI_SENSE_BUFFERSIZE)
|
|
|
+ snslen = SCSI_SENSE_BUFFERSIZE;
|
|
|
+
|
|
|
+ if (resp_info & RSP_LEN_VALID)
|
|
|
+ rsplen = be32_to_cpu(fcprsp->rspRspLen);
|
|
|
+ memcpy(cmnd->sense_buffer, &fcprsp->rspInfo0 + rsplen, snslen);
|
|
|
+ }
|
|
|
+ lp = (uint32_t *)cmnd->sense_buffer;
|
|
|
+
|
|
|
+ if (!scsi_status && (resp_info & RESID_UNDER))
|
|
|
+ logit = LOG_FCP;
|
|
|
+
|
|
|
+ lpfc_printf_log(phba, KERN_WARNING, logit,
|
|
|
+ "%d:0730 FCP command x%x failed: x%x SNS x%x x%x "
|
|
|
+ "Data: x%x x%x x%x x%x x%x\n",
|
|
|
+ phba->brd_no, cmnd->cmnd[0], scsi_status,
|
|
|
+ be32_to_cpu(*lp), be32_to_cpu(*(lp + 3)), resp_info,
|
|
|
be32_to_cpu(fcprsp->rspResId),
|
|
|
be32_to_cpu(fcprsp->rspSnsLen),
|
|
|
be32_to_cpu(fcprsp->rspRspLen),
|
|
@@ -328,14 +345,6 @@ lpfc_handle_fcp_err(struct lpfc_scsi_buf *lpfc_cmd)
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- if ((resp_info & SNS_LEN_VALID) && fcprsp->rspSnsLen) {
|
|
|
- uint32_t snslen = be32_to_cpu(fcprsp->rspSnsLen);
|
|
|
- if (snslen > SCSI_SENSE_BUFFERSIZE)
|
|
|
- snslen = SCSI_SENSE_BUFFERSIZE;
|
|
|
-
|
|
|
- memcpy(cmnd->sense_buffer, &fcprsp->rspInfo0 + rsplen, snslen);
|
|
|
- }
|
|
|
-
|
|
|
cmnd->resid = 0;
|
|
|
if (resp_info & RESID_UNDER) {
|
|
|
cmnd->resid = be32_to_cpu(fcprsp->rspResId);
|
|
@@ -378,7 +387,7 @@ lpfc_handle_fcp_err(struct lpfc_scsi_buf *lpfc_cmd)
|
|
|
*/
|
|
|
} else if ((scsi_status == SAM_STAT_GOOD) && fcpi_parm &&
|
|
|
(cmnd->sc_data_direction == DMA_FROM_DEVICE)) {
|
|
|
- lpfc_printf_log(phba, KERN_WARNING, LOG_FCP,
|
|
|
+ lpfc_printf_log(phba, KERN_WARNING, LOG_FCP | LOG_FCP_ERROR,
|
|
|
"%d:0734 FCP Read Check Error Data: "
|
|
|
"x%x x%x x%x x%x\n", phba->brd_no,
|
|
|
be32_to_cpu(fcpcmd->fcpDl),
|