linux/drivers/ata
Niklas Cassel e5dd410acb ata: libata: Clear DID_TIME_OUT for ATA PT commands with sense data
When ata_qc_complete() schedules a command for EH using
ata_qc_schedule_eh(), blk_abort_request() will be called, which leads to
req->q->mq_ops->timeout() / scsi_timeout() being called.

scsi_timeout(), if the LLDD has no abort handler (libata has no abort
handler), will set host byte to DID_TIME_OUT, and then call
scsi_eh_scmd_add() to add the command to EH.

Thus, when commands first enter libata's EH strategy_handler, all the
commands that have been added to EH will have DID_TIME_OUT set.

libata has its own flag (AC_ERR_TIMEOUT), that it sets for commands that
have not received a completion at the time of entering EH.

Thus, libata doesn't really care about DID_TIME_OUT at all, and currently
clears the host byte at the end of EH, in ata_scsi_qc_complete(), before
scsi_eh_finish_cmd() is called.

However, this clearing in ata_scsi_qc_complete() is currently only done
for commands that are not ATA passthrough commands.

Since the host byte is visible in the completion that we return to user
space for ATA passthrough commands, for ATA passthrough commands that got
completed via EH (commands with sense data), the user will incorrectly see:
ATA pass-through(16): transport error: Host_status=0x03 [DID_TIME_OUT]

Fix this by moving the clearing of the host byte (which is currently only
done for commands that are not ATA passthrough commands) from
ata_scsi_qc_complete() to the start of EH (regardless if the command is
ATA passthrough or not).

While at it, use the proper helper function to clear the host byte, rather
than open coding the clearing.

This will make sure that we:
-Correctly clear DID_TIME_OUT for both ATA passthrough commands and
 commands that are not ATA passthrough commands.
-Do not needlessly clear the host byte for commands that did not go via EH.
 ata_scsi_qc_complete() is called both for commands that are completed
 normally (without going via EH), and for commands that went via EH,
 however, only commands that went via EH will have DID_TIME_OUT set.

Fixes: 24aeebbf8e ("scsi: ata: libata: Change ata_eh_request_sense() to not set CHECK_CONDITION")
Reported-by: Igor Pylypiv <ipylypiv@google.com>
Closes: https://lore.kernel.org/linux-ide/ZttIN8He8TOZ7Lct@google.com/
Signed-off-by: Niklas Cassel <cassel@kernel.org>
Tested-by: Igor Pylypiv <ipylypiv@google.com>
Reviewed-by: Hannes Reinecke <hare@suse.de>
Signed-off-by: Damien Le Moal <dlemoal@kernel.org>
2024-09-11 08:03:43 +09:00
..
pata_parport parport: Remove parport_driver.devmodel 2024-07-03 16:44:22 +02:00
acard-ahci.c scsi: ata: Declare SCSI host templates const 2023-03-24 19:19:19 -04:00
ahci_brcm.c ata: ahci_brcm: Use devm_platform_ioremap_resource_byname() helper function 2024-08-28 10:32:21 +09:00
ahci_ceva.c ata: ahci_ceva: fix error handling for Xilinx GT PHY support 2024-02-19 10:44:37 +01:00
ahci_da850.c ata: libata: Make ata_platform_remove_one return void 2023-05-15 06:49:39 +09:00
ahci_dm816.c ata: libata: Make ata_platform_remove_one return void 2023-05-15 06:49:39 +09:00
ahci_dwc.c ata: Explicitly include correct DT includes 2023-08-02 17:37:05 +09:00
ahci_imx.c ata: ahci_imx: Fix error code in probe() 2024-08-15 13:44:33 +02:00
ahci_mtk.c ata: Explicitly include correct DT includes 2023-08-02 17:37:05 +09:00
ahci_mvebu.c ata: Explicitly include correct DT includes 2023-08-02 17:37:05 +09:00
ahci_octeon.c ata: ahci_octeon: Convert to devm_platform_ioremap_resource() 2023-08-02 17:37:06 +09:00
ahci_platform.c driver core changes for 6.5-rc1 2023-07-03 12:56:23 -07:00
ahci_qoriq.c ata: fix debounce timings type 2023-08-02 17:37:06 +09:00
ahci_seattle.c ata: ahci_seattle: Convert to devm_platform_ioremap_resource() 2023-08-02 17:37:06 +09:00
ahci_st.c ata: ahci_st: Remove an unused field in struct st_ahci_drv_data 2024-04-02 12:18:15 +09:00
ahci_sunxi.c ata: Explicitly include correct DT includes 2023-08-02 17:37:05 +09:00
ahci_tegra.c ata: ahci_tegra: Convert to devm_platform_ioremap_resource() 2023-08-02 17:37:06 +09:00
ahci_xgene.c ata: xgene: Use of_device_get_match_data() 2023-10-11 17:53:37 +09:00
ahci.c ata: ahci: Rephrase comment to not use the term blacklist 2024-07-30 07:10:14 +09:00
ahci.h scsi: libata: Switch to using ->device_configure 2024-04-11 21:37:50 -04:00
ata_generic.c scsi: ata: Declare SCSI host templates const 2023-03-24 19:19:19 -04:00
ata_piix.c ata: ata_piix: Remove useless comment in piix_init_sidpr() 2024-07-30 07:10:25 +09:00
Kconfig ata: Kconfig: Update SATA_MOBILE_LPM_POLICY default to med_power_with_dipm 2024-05-27 11:34:50 +02:00
libahci_platform.c ata: libahci_platform: Simplify code with for_each_child_of_node_scoped() 2024-08-15 13:30:06 +02:00
libahci.c ata: libata-core: Set ATA_QCFLAG_RTF_FILLED in fill_result_tf() 2024-07-03 10:51:41 +02:00
libata-acpi.c ata: make use of ata_port_is_frozen() helper 2022-10-18 13:53:27 +09:00
libata-core.c ata: libata: Improve CDL resource management 2024-09-07 10:16:56 +09:00
libata-eh.c ata: libata: Clear DID_TIME_OUT for ATA PT commands with sense data 2024-09-11 08:03:43 +09:00
libata-pata-timings.c ata: separate PATA timings code from libata-core.c 2020-03-26 10:28:19 -06:00
libata-pmp.c ata: libata: Move sector_buf from struct ata_port to struct ata_device 2024-09-07 10:16:55 +09:00
libata-sata.c ata: libata: Improve CDL resource management 2024-09-07 10:16:56 +09:00
libata-scsi.c ata: libata: Clear DID_TIME_OUT for ATA PT commands with sense data 2024-09-11 08:03:43 +09:00
libata-sff.c ata: libata: Remove ata_noop_qc_prep() 2024-08-02 09:18:42 +09:00
libata-trace.c ata: scsi: rename flag ATA_QCFLAG_FAILED to ATA_QCFLAG_EH 2023-01-04 13:36:26 +09:00
libata-transport.c ata: libata: Fix W=1 compilation warning 2024-09-07 11:02:52 +09:00
libata-transport.h ata,scsi: Remove wrappers ata_sas_tport_{add,delete}() 2024-07-04 11:52:31 +02:00
libata-zpodd.c ata: libata: Move sector_buf from struct ata_port to struct ata_device 2024-09-07 10:16:55 +09:00
libata.h ata: libata: Improve CDL resource management 2024-09-07 10:16:56 +09:00
Makefile ATA changes for 6.3-rc1 2023-02-22 13:35:51 -08:00
pata_acpi.c scsi: ata: Declare SCSI host templates const 2023-03-24 19:19:19 -04:00
pata_ali.c scsi: ata: Declare SCSI host templates const 2023-03-24 19:19:19 -04:00
pata_amd.c scsi: ata: Declare SCSI host templates const 2023-03-24 19:19:19 -04:00
pata_arasan_cf.c ata: pata_arasan_cf: Convert to platform remove callback returning void 2023-08-02 17:53:09 +09:00
pata_artop.c scsi: ata: Declare SCSI host templates const 2023-03-24 19:19:19 -04:00
pata_atiixp.c scsi: ata: Declare SCSI host templates const 2023-03-24 19:19:19 -04:00
pata_atp867x.c scsi: ata: Declare SCSI host templates const 2023-03-24 19:19:19 -04:00
pata_buddha.c ata: pata_buddha: Remove #include <asm/ide.h> 2023-08-24 08:09:59 +09:00
pata_cmd64x.c scsi: ata: Declare SCSI host templates const 2023-03-24 19:19:19 -04:00
pata_cmd640.c scsi: ata: Declare SCSI host templates const 2023-03-24 19:19:19 -04:00
pata_cs5520.c ata: pata_cs5520: Rephrase file header comment 2024-07-30 07:10:30 +09:00
pata_cs5530.c scsi: ata: Declare SCSI host templates const 2023-03-24 19:19:19 -04:00
pata_cs5535.c scsi: ata: Declare SCSI host templates const 2023-03-24 19:19:19 -04:00
pata_cs5536.c scsi: ata: Declare SCSI host templates const 2023-03-24 19:19:19 -04:00
pata_cypress.c scsi: ata: Declare SCSI host templates const 2023-03-24 19:19:19 -04:00
pata_efar.c scsi: ata: Declare SCSI host templates const 2023-03-24 19:19:19 -04:00
pata_ep93xx.c ata: libata: Remove ata_noop_qc_prep() 2024-08-02 09:18:42 +09:00
pata_falcon.c ata: pata_falcon: Convert to platform remove callback returning void 2023-11-08 09:00:44 +09:00
pata_ftide010.c ata: pata_ftide010: Enable module autoloading 2024-09-02 08:05:36 +09:00
pata_gayle.c ata: pata_gayle: Convert to platform remove callback returning void 2023-11-08 09:00:49 +09:00
pata_hpt3x2n.c scsi: ata: Declare SCSI host templates const 2023-03-24 19:19:19 -04:00
pata_hpt3x3.c scsi: ata: Declare SCSI host templates const 2023-03-24 19:19:19 -04:00
pata_hpt37x.c ata: pata_hpt37x: Rename hpt_dma_blacklisted() 2024-07-30 07:10:38 +09:00
pata_hpt366.c ata: pata_hpt366: Rename hpt_dma_blacklisted() 2024-07-30 07:10:34 +09:00
pata_icside.c ata: libata: Remove ata_noop_qc_prep() 2024-08-02 09:18:42 +09:00
pata_imx.c ata: pata_imx: Use helper function devm_clk_get_enabled() 2023-08-17 07:45:32 +09:00
pata_isapnp.c ata: pata_isapnp: Add missing error check for devm_ioport_map() 2023-11-20 09:22:26 +09:00
pata_it821x.c ata: libata: Use QUIRK instead of HORKAGE 2024-07-30 07:09:54 +09:00
pata_it8213.c scsi: ata: Declare SCSI host templates const 2023-03-24 19:19:19 -04:00
pata_ixp4xx_cf.c ata: pata_ixp4xx: Enable module autoloading 2024-09-02 08:06:04 +09:00
pata_jmicron.c scsi: ata: Declare SCSI host templates const 2023-03-24 19:19:19 -04:00
pata_legacy.c ata: pata_legacy: make legacy_exit() work again 2024-05-07 07:23:31 +09:00
pata_macio.c block: move dma_pad_mask into queue_limits 2024-06-26 09:37:35 -06:00
pata_marvell.c scsi: ata: Declare SCSI host templates const 2023-03-24 19:19:19 -04:00
pata_mpc52xx.c ata: libata: Remove ata_noop_qc_prep() 2024-08-02 09:18:42 +09:00
pata_mpiix.c scsi: ata: Declare SCSI host templates const 2023-03-24 19:19:19 -04:00
pata_netcell.c scsi: ata: Declare SCSI host templates const 2023-03-24 19:19:19 -04:00
pata_ninja32.c scsi: ata: Declare SCSI host templates const 2023-03-24 19:19:19 -04:00
pata_ns87410.c scsi: ata: Declare SCSI host templates const 2023-03-24 19:19:19 -04:00
pata_ns87415.c ata: pata_ns87415: mark ns87560_tf_read static 2023-07-28 08:52:42 +09:00
pata_octeon_cf.c ata: libata: Remove ata_noop_qc_prep() 2024-08-02 09:18:42 +09:00
pata_of_platform.c ata: libata: Make ata_platform_remove_one return void 2023-05-15 06:49:39 +09:00
pata_oldpiix.c scsi: ata: Declare SCSI host templates const 2023-03-24 19:19:19 -04:00
pata_opti.c scsi: ata: Declare SCSI host templates const 2023-03-24 19:19:19 -04:00
pata_optidma.c scsi: ata: Declare SCSI host templates const 2023-03-24 19:19:19 -04:00
pata_pcmcia.c scsi: ata: Declare SCSI host templates const 2023-03-24 19:19:19 -04:00
pata_pdc202xx_old.c scsi: ata: Declare SCSI host templates const 2023-03-24 19:19:19 -04:00
pata_pdc2027x.c scsi: ata: Declare SCSI host templates const 2023-03-24 19:19:19 -04:00
pata_piccolo.c scsi: ata: Declare SCSI host templates const 2023-03-24 19:19:19 -04:00
pata_platform.c ata: libata: Make ata_platform_remove_one return void 2023-05-15 06:49:39 +09:00
pata_pxa.c ata: pata_pxa: convert not to use dma_request_slave_channel() 2023-11-20 09:28:25 +09:00
pata_radisys.c scsi: ata: Declare SCSI host templates const 2023-03-24 19:19:19 -04:00
pata_rb532_cf.c ata: pata_rb532_cf: Convert to platform remove callback returning void 2023-08-02 17:55:52 +09:00
pata_rdc.c scsi: ata: Declare SCSI host templates const 2023-03-24 19:19:19 -04:00
pata_rz1000.c scsi: ata: Declare SCSI host templates const 2023-03-24 19:19:19 -04:00
pata_sc1200.c scsi: ata: Declare SCSI host templates const 2023-03-24 19:19:19 -04:00
pata_sch.c scsi: ata: Declare SCSI host templates const 2023-03-24 19:19:19 -04:00
pata_serverworks.c ata: pata_serverworks: Do not use the term blacklist 2024-07-30 07:10:08 +09:00
pata_sil680.c scsi: ata: Declare SCSI host templates const 2023-03-24 19:19:19 -04:00
pata_sis.c scsi: ata: Declare SCSI host templates const 2023-03-24 19:19:19 -04:00
pata_sl82c105.c ata: libata: remove deprecated EH callbacks 2023-08-02 17:45:42 +09:00
pata_triflex.c scsi: ata: Declare SCSI host templates const 2023-03-24 19:19:19 -04:00
pata_via.c scsi: ata: Declare SCSI host templates const 2023-03-24 19:19:19 -04:00
pdc_adma.c scsi: ata: Declare SCSI host templates const 2023-03-24 19:19:19 -04:00
sata_dwc_460ex.c ata: sata_dwc_460ex: Convert to platform remove callback returning void 2023-08-02 17:55:52 +09:00
sata_fsl.c ata: sata_fsl: Convert to platform remove callback returning void 2023-08-02 17:55:52 +09:00
sata_gemini.c ata: sata_gemini: Enable module autoloading 2024-09-02 08:06:23 +09:00
sata_gemini.h License cleanup: add SPDX GPL-2.0 license identifier to files with no license 2017-11-02 11:10:55 +01:00
sata_highbank.c ata: fix debounce timings type 2023-08-02 17:37:06 +09:00
sata_inic162x.c ata: fix debounce timings type 2023-08-02 17:37:06 +09:00
sata_mv.c SCSI misc on 20240514 2024-05-14 18:25:53 -07:00
sata_nv.c scsi: libata: Switch to using ->device_configure 2024-04-11 21:37:50 -04:00
sata_promise.c scsi: ata: Declare SCSI host templates const 2023-03-24 19:19:19 -04:00
sata_promise.h treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 18 2019-05-21 11:28:46 +02:00
sata_qstor.c scsi: ata: Declare SCSI host templates const 2023-03-24 19:19:19 -04:00
sata_rcar.c ata: sata_rcar: Convert to platform remove callback returning void 2023-08-02 17:55:52 +09:00
sata_sil24.c scsi: libata: Switch to using ->device_configure 2024-04-11 21:37:50 -04:00
sata_sil.c ata: sata_sil: Rename sil_blacklist to sil_quirks 2024-07-30 07:10:21 +09:00
sata_sis.c scsi: ata: Declare SCSI host templates const 2023-03-24 19:19:19 -04:00
sata_svw.c ata: Use of_property_read_reg() to parse "reg" 2023-06-13 15:38:48 +09:00
sata_sx4.c ata: sata_sx4: fix pdc20621_get_from_dimm() on 64-bit 2024-04-01 07:52:17 +09:00
sata_uli.c scsi: ata: Declare SCSI host templates const 2023-03-24 19:19:19 -04:00
sata_via.c scsi: ata: Declare SCSI host templates const 2023-03-24 19:19:19 -04:00
sata_vsc.c scsi: ata: Declare SCSI host templates const 2023-03-24 19:19:19 -04:00
sis.h License cleanup: add SPDX GPL-2.0 license identifier to files with no license 2017-11-02 11:10:55 +01:00