linux-stable/drivers/scsi/pm8001
John Garry 811be570a9 scsi: pm8001: Use sas_ata_device_link_abort() to handle NCQ errors
In commit c6b9ef5779 ("[SCSI] pm80xx: NCQ error handling changes") the
driver had support added to handle NCQ errors but much of what is done in
this handling is duplicated from the libata EH.

In that named commit we handle in 2x main steps:

 a. Issue read log ext10 to examine and clear the errors

 b. Issue SATA_ABORT all command

Indeed, in libata EH, we do similar to above:

 a. ata_do_eh() -> ata_eh_autopsy() -> ata_eh_link_autopsy() ->
    ata_eh_analyze_ncq_error() -> ata_eh_read_log_10h()

 b. ata_do_eh() -> ata_eh_recover() which will issue a device soft reset
    or hard reset

Since there is so much duplication, use sas_ata_device_link_abort() which
will abort all pending IOs and kick of ATA EH which will do the steps,
above.

However we will not follow the advisory to send the SATA_ABORT all command
after the autopsy in read log ext10. Indeed, in libsas EH, we already send
a per-task SATA_ABORT command, and this is prior to the ATA EH kicking in
and issuing the read log ext10 in the recovery process. I judge that this
is ok as the SATA_ABORT command does not actually send any protocol on the
link to abort I/O on the other side, so would not change any state on the
disk (for the read log ext10 command).

Signed-off-by: John Garry <john.garry@huawei.com>
Link: https://lore.kernel.org/r/1665998435-199946-7-git-send-email-john.garry@huawei.com
Tested-by: Damien Le Moal <damien.lemoal@opensource.wdc.com>
Tested-by: Niklas Cassel <niklas.cassel@wdc.com> # pm80xx
Acked-by: Jack Wang <jinpu.wang@ionos.com>
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
2022-10-18 02:37:45 +00:00
..
Makefile scsi: pm80xx: Add tracepoints 2021-11-18 22:26:58 -05:00
pm80xx_hwi.c scsi: pm8001: Use sas_ata_device_link_abort() to handle NCQ errors 2022-10-18 02:37:45 +00:00
pm80xx_hwi.h scsi: pm8001: Use libsas internal abort support 2022-03-14 23:33:24 -04:00
pm80xx_tracepoints.c scsi: pm80xx: Add tracepoints 2021-11-18 22:26:58 -05:00
pm80xx_tracepoints.h scsi: pm80xx: Add pm80xx_mpi_build_cmd() tracepoint 2021-11-18 22:26:58 -05:00
pm8001_chips.h [SCSI] pm8001: fix endian issue with code optimization. 2012-02-29 16:54:09 -06:00
pm8001_ctl.c scsi: pm8001: Fix pm8001_update_flash() local variable type 2022-02-22 21:31:16 -05:00
pm8001_ctl.h scsi: pm8001: Clean up white space 2021-04-12 23:21:26 -04:00
pm8001_defs.h scsi: pm80xx: Increase the number of outstanding I/O supported to 1024 2020-10-07 23:50:04 -04:00
pm8001_hwi.c scsi: pm8001: Use sas_ata_device_link_abort() to handle NCQ errors 2022-10-18 02:37:45 +00:00
pm8001_hwi.h scsi: pm8001: Use libsas internal abort support 2022-03-14 23:33:24 -04:00
pm8001_init.c block: Change the return type of blk_mq_map_queues() into void 2022-08-22 10:07:53 -06:00
pm8001_sas.c scsi: pm8001: Use sas_ata_device_link_abort() to handle NCQ errors 2022-10-18 02:37:45 +00:00
pm8001_sas.h scsi: pm8001: Use sas_ata_device_link_abort() to handle NCQ errors 2022-10-18 02:37:45 +00:00