mirror of
https://github.com/torvalds/linux.git
synced 2026-05-27 00:22:00 +02:00
scsi: hisi_sas: Handle the NCQ error returned by D2H frame
We find that some disks use D2H frame instead of SDB frame to return NCQ error. Currently, only the I/O corresponding to the D2H frame is processed in this scenario, which does not meet the processing requirements of the NCQ error scenario. So we set dev_status to HISI_SAS_DEV_NCQ_ERR and abort all I/Os of the disk in this scenario. Co-developed-by: Xingui Yang <yangxingui@huawei.com> Signed-off-by: Xingui Yang <yangxingui@huawei.com> Signed-off-by: Xiang Chen <chenxiang66@hisilicon.com> Link: https://lore.kernel.org/r/20240402035513.2024241-2-chenxiang66@hisilicon.com Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
This commit is contained in:
parent
97a54ef596
commit
358e919a35
|
|
@ -2244,7 +2244,15 @@ slot_err_v3_hw(struct hisi_hba *hisi_hba, struct sas_task *task,
|
|||
case SAS_PROTOCOL_SATA | SAS_PROTOCOL_STP:
|
||||
if ((dw0 & CMPLT_HDR_RSPNS_XFRD_MSK) &&
|
||||
(sipc_rx_err_type & RX_FIS_STATUS_ERR_MSK)) {
|
||||
ts->stat = SAS_PROTO_RESPONSE;
|
||||
if (task->ata_task.use_ncq) {
|
||||
struct domain_device *device = task->dev;
|
||||
struct hisi_sas_device *sas_dev = device->lldd_dev;
|
||||
|
||||
sas_dev->dev_status = HISI_SAS_DEV_NCQ_ERR;
|
||||
slot->abort = 1;
|
||||
} else {
|
||||
ts->stat = SAS_PROTO_RESPONSE;
|
||||
}
|
||||
} else if (dma_rx_err_type & RX_DATA_LEN_UNDERFLOW_MSK) {
|
||||
ts->residual = trans_tx_fail_type;
|
||||
ts->stat = SAS_DATA_UNDERRUN;
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user