linux-stable/drivers/ata
Niklas Cassel 983320199e ata: libata: fix NCQ autosense logic
[ Upstream commit 7390896b34 ]

Currently, the logic if we should call ata_scsi_set_sense()
(and set flag ATA_QCFLAG_SENSE_VALID to indicate that we have
successfully added sense data to the struct ata_queued_cmd)
looks like this:

if (dev->class == ATA_DEV_ZAC &&
    ((qc->result_tf.status & ATA_SENSE) || qc->result_tf.auxiliary))

The problem with this is that a drive can support the NCQ command
error log without supporting NCQ autosense.

On such a drive, if the failing command has sense data, the status
field in the NCQ command error log will have the ATA_SENSE bit set.

It is just that this sense data is not included in the NCQ command
error log when NCQ autosense is not supported. Instead the sense
data has to be fetched using the REQUEST SENSE DATA EXT command.

Therefore, we should only add the sense data if the drive supports
NCQ autosense AND the ATA_SENSE bit is set in the status field.

Fix this, and at the same time, remove the duplicated ATA_DEV_ZAC
check. The struct ata_taskfile supplied to ata_eh_read_log_10h()
is memset:ed before calling the function, so simply checking if
qc->result_tf.auxiliary is set is sufficient to tell us that the
log actually contained sense data.

Fixes: d238ffd59d ("libata: do not attempt to retrieve sense code twice")
Signed-off-by: Niklas Cassel <niklas.cassel@wdc.com>
Signed-off-by: Damien Le Moal <damien.lemoal@opensource.wdc.com>
Signed-off-by: Sasha Levin <sashal@kernel.org>
2022-12-31 13:14:06 +01:00
..
acard-ahci.c ata: add/use ata_taskfile::{error|status} fields 2022-12-31 13:14:06 +01:00
ahci.c ata: add/use ata_taskfile::{error|status} fields 2022-12-31 13:14:06 +01:00
ahci.h ata: ahci: Match EM_MAX_SLOTS with SATA_PMP_MAX_PORTS 2022-10-29 10:12:54 +02:00
ahci_brcm.c ata: ahci_brcm: Fix use of BCM7216 reset controller 2021-05-03 13:15:04 -05:00
ahci_ceva.c ata: ahci: ceva: Updated code by using dev_err_probe() 2021-04-06 09:25:01 -06:00
ahci_da850.c
ahci_dm816.c
ahci_imx.c ata: ahci-imx: Fix MODULE_ALIAS 2022-10-29 10:12:54 +02:00
ahci_mtk.c
ahci_mvebu.c ata: ahci: mvebu: Make SATA PHY optional for Armada 3720 2020-10-09 12:47:56 -06:00
ahci_octeon.c
ahci_platform.c
ahci_qoriq.c ata: add/use ata_taskfile::{error|status} fields 2022-12-31 13:14:06 +01:00
ahci_seattle.c
ahci_st.c
ahci_sunxi.c ata: ahci_sunxi: Disable DIPM 2021-06-14 08:26:54 -06:00
ahci_tegra.c ata: ahci_tegra: call tegra_powergate_power_off only when PM domain is not present 2021-04-11 20:35:08 -06:00
ahci_xgene.c ata: add/use ata_taskfile::{error|status} fields 2022-12-31 13:14:06 +01:00
ata_generic.c ata: ata_generic: Fix misspelling of 'ata_generic_init_one()' 2021-03-30 20:21:26 -06:00
ata_piix.c
Kconfig ARM: SoC changes for 5.14 2021-07-10 09:22:44 -07:00
libahci.c ata: add/use ata_taskfile::{error|status} fields 2022-12-31 13:14:06 +01:00
libahci_platform.c ata: libahci_platform: Sanity check the DT child nodes number 2022-10-26 12:35:48 +02:00
libata-acpi.c ata: add/use ata_taskfile::{error|status} fields 2022-12-31 13:14:06 +01:00
libata-core.c ata: add/use ata_taskfile::{error|status} fields 2022-12-31 13:14:06 +01:00
libata-eh.c ata: add/use ata_taskfile::{error|status} fields 2022-12-31 13:14:06 +01:00
libata-pata-timings.c
libata-pmp.c ata: libata-pmp: Fix misspelling of 'val' 2021-03-12 07:28:30 -07:00
libata-sata.c ata: libata: fix NCQ autosense logic 2022-12-31 13:14:06 +01:00
libata-scsi.c ata: add/use ata_taskfile::{error|status} fields 2022-12-31 13:14:06 +01:00
libata-sff.c ata: add/use ata_taskfile::{error|status} fields 2022-12-31 13:14:06 +01:00
libata-trace.c
libata-transport.c ata: libata-transport: fix error handling in ata_tdev_add() 2022-11-26 09:24:38 +01:00
libata-transport.h
libata-zpodd.c
libata.h
Makefile
pata_acpi.c ata: pata_acpi: Fix some incorrect function param descriptions 2021-03-30 20:21:26 -06:00
pata_ali.c ata: pata_ali: Supply description for 'ali_20_filter()'s 'mask' param 2021-03-12 07:28:30 -07:00
pata_amd.c ata: pata_amd: Fix incorrectly named function in the header 2021-03-12 07:28:30 -07:00
pata_arasan_cf.c pata_arasan_cf: fix IRQ check 2021-03-26 17:13:02 -06:00
pata_artop.c ata: pata_artop: Repair possible copy/paste issue in 'artop_6210_qc_defer()'s header 2021-03-12 07:28:30 -07:00
pata_atiixp.c ata: pata_atiixp: Avoid overwriting initialised field in 'atiixp_sht' 2021-06-16 06:50:25 -06:00
pata_atp867x.c
pata_bk3710.c
pata_buddha.c
pata_cmd64x.c pata_cmd64x: Use fallthrough pseudo-keyword 2020-10-02 17:51:30 -06:00
pata_cmd640.c
pata_cs5520.c ata: pata_cs5520: Avoid overwriting initialised field in 'cs5520_sht' 2021-06-16 06:50:25 -06:00
pata_cs5530.c ata: pata_cs5530: Avoid overwriting initialised field in 'cs5530_sht' 2021-06-16 06:50:25 -06:00
pata_cs5535.c
pata_cs5536.c
pata_cypress.c pata_cypress: add a module option to disable BM-DMA 2021-06-16 08:52:38 -06:00
pata_efar.c
pata_ep93xx.c ata: add/use ata_taskfile::{error|status} fields 2022-12-31 13:14:06 +01:00
pata_falcon.c scsi: ata: Use scsi_cmd_to_rq() instead of scsi_cmnd.request 2021-08-11 22:25:37 -04:00
pata_ftide010.c
pata_gayle.c
pata_hpt3x2n.c ata: pata_hpt3x2n: Fix possible doc-rotted function name 2021-03-12 07:28:31 -07:00
pata_hpt3x3.c
pata_hpt37x.c ata: pata_hpt37x: fix PCI clock detection 2022-03-08 19:12:33 +01:00
pata_hpt366.c ata: pata_hpt366: Provide missing description for 'hpt366_filter()'s 'mask' param 2021-03-12 07:28:30 -07:00
pata_icside.c ata: Avoid comma separated statements 2021-01-31 08:05:46 -07:00
pata_imx.c
pata_isapnp.c
pata_it821x.c ata: pata_it821x: Fix possible doc-rotted function names 2021-03-30 20:21:25 -06:00
pata_it8213.c
pata_ixp4xx_cf.c ata: libata: move ata_{port,link,dev}_dbg to standard pr_XXX() macros 2022-12-31 13:14:06 +01:00
pata_jmicron.c ata: pata_jmicron: Fix incorrectly documented function parameter 2021-03-12 07:28:31 -07:00
pata_legacy.c ata: pata_legacy: fix pdc20230_set_piomode() 2022-11-10 18:15:28 +01:00
pata_macio.c ata: pata_macio: Avoid overwriting initialised field in 'pata_macio_sht' 2021-06-16 06:50:26 -06:00
pata_marvell.c ata: pata_marvell: Check the 'bmdma_addr' beforing reading 2022-04-27 14:38:58 +02:00
pata_mpc52xx.c
pata_mpiix.c
pata_netcell.c
pata_ninja32.c
pata_ns87410.c
pata_ns87415.c ata: add/use ata_taskfile::{error|status} fields 2022-12-31 13:14:06 +01:00
pata_octeon_cf.c ata: add/use ata_taskfile::{error|status} fields 2022-12-31 13:14:06 +01:00
pata_of_platform.c
pata_oldpiix.c
pata_opti.c ata: pata_opti: Fix spelling issue of 'val' in 'opti_write_reg()' 2021-03-30 20:21:26 -06:00
pata_optidma.c ata: pata_optidma: Fix a function misnaming, a formatting issue and a missing description 2021-03-12 07:28:31 -07:00
pata_palmld.c
pata_pcmcia.c
pata_pdc202xx_old.c ata: pata_pdc202xx_old: Fix some incorrectly named functions 2021-03-30 20:21:25 -06:00
pata_pdc2027x.c ata: pata_pdc2027x: Fix some incorrect function names and parameter docs 2021-03-12 07:28:31 -07:00
pata_piccolo.c ata: pata_piccolo: 'ata_tosh_init()' is misnamed in its header 2021-03-30 20:21:25 -06:00
pata_platform.c pata_platform: Document `pio_mask' module parameter 2021-04-06 09:27:30 -06:00
pata_pxa.c
pata_radisys.c
pata_rb532_cf.c ata: rb532_cf: remove redundant codes 2021-06-24 18:49:01 -06:00
pata_rdc.c
pata_rz1000.c
pata_samsung_cf.c ata: add/use ata_taskfile::{error|status} fields 2022-12-31 13:14:06 +01:00
pata_sc1200.c ata: pata_sc1200: sc1200_sht'Avoid overwriting initialised field in ' 2021-06-16 06:50:25 -06:00
pata_sch.c
pata_serverworks.c ata: pata_serverworks: Avoid overwriting initialised field in 'serverworks_osb4_sht 2021-06-16 06:50:26 -06:00
pata_sil680.c ata: pata_sil680: Add some missing function parameter docs 2021-03-30 20:21:25 -06:00
pata_sis.c ata: pata_sis: Remove superfluous param description and supply another 2021-03-30 20:21:25 -06:00
pata_sl82c105.c ata: pata_sl82c105: Fix potential doc-rot 2021-03-30 20:21:25 -06:00
pata_triflex.c ata: pata_triflex: Repair some misnamed functions and fix some param descriptions 2021-03-30 20:21:25 -06:00
pata_via.c ata: pata_via: Fix a kernel-doc formatting issue 2021-03-30 20:21:25 -06:00
pdc_adma.c
sata_dwc_460ex.c ata: sata_dwc_460ex: Fix crash due to OOB write 2022-04-13 20:59:23 +02:00
sata_fsl.c sata_fsl: fix warning in remove_proc_entry when rmmod sata_fsl 2021-12-08 09:04:42 +01:00
sata_gemini.c
sata_gemini.h
sata_highbank.c ata: add/use ata_taskfile::{error|status} fields 2022-12-31 13:14:06 +01:00
sata_inic162x.c ata: add/use ata_taskfile::{error|status} fields 2022-12-31 13:14:06 +01:00
sata_mv.c ata: sata_mv: Fix the error handling of mv_chip_id() 2021-10-25 08:53:04 +09:00
sata_nv.c ata: sata_nv: Do not over-write initialise fields in 'nv_adma_sht' and 'nv_swncq_sht' 2021-06-16 06:50:25 -06:00
sata_promise.c
sata_promise.h
sata_qstor.c
sata_rcar.c ata: add/use ata_taskfile::{error|status} fields 2022-12-31 13:14:06 +01:00
sata_sil.c
sata_sil24.c ata: sata_sil24: Do not over-write initialise fields in 'sil24_sht' 2021-06-16 06:50:25 -06:00
sata_sis.c
sata_svw.c ata: add/use ata_taskfile::{error|status} fields 2022-12-31 13:14:06 +01:00
sata_sx4.c
sata_uli.c
sata_via.c
sata_vsc.c ata: add/use ata_taskfile::{error|status} fields 2022-12-31 13:14:06 +01:00
sis.h