On 4/1/24 14:49, chenxiang wrote: > From: Xingui Yang <yangxingui@xxxxxxxxxx> > > 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. > > Signed-off-by: Xingui Yang <yangxingui@xxxxxxxxxx> > Signed-off-by: Xiang Chen <chenxiang66@xxxxxxxxxxxxx> > --- > drivers/scsi/hisi_sas/hisi_sas_v3_hw.c | 9 ++++++++- > 1 file changed, 8 insertions(+), 1 deletion(-) > > diff --git a/drivers/scsi/hisi_sas/hisi_sas_v3_hw.c b/drivers/scsi/hisi_sas/hisi_sas_v3_hw.c > index 7d2a33514538..3935fa6bc72b 100644 > --- a/drivers/scsi/hisi_sas/hisi_sas_v3_hw.c > +++ b/drivers/scsi/hisi_sas/hisi_sas_v3_hw.c > @@ -2244,7 +2244,14 @@ 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; Missing blank line after the declaration. And why the line split for the above declaration ? That fits in 80 chars line... > + sas_dev->dev_status = HISI_SAS_DEV_NCQ_ERR; > + slot->abort = 1; > + } else > + ts->stat = SAS_PROTO_RESPONSE; Missing the curly brackets here. > } else if (dma_rx_err_type & RX_DATA_LEN_UNDERFLOW_MSK) { > ts->residual = trans_tx_fail_type; > ts->stat = SAS_DATA_UNDERRUN; -- Damien Le Moal Western Digital Research