android_kernel_samsung_msm8976/drivers/ata
Wei Fang 52f5551873 scsi: fix race between simultaneous decrements of ->host_failed
commit 72d8c36ec364c82bf1bf0c64dfa1041cfaf139f7 upstream.

sas_ata_strategy_handler() adds the works of the ata error handler to
system_unbound_wq. This workqueue asynchronously runs work items, so the
ata error handler will be performed concurrently on different CPUs. In
this case, ->host_failed will be decreased simultaneously in
scsi_eh_finish_cmd() on different CPUs, and become abnormal.

It will lead to permanently inequality between ->host_failed and
->host_busy, and scsi error handler thread won't start running. IO
errors after that won't be handled.

Since all scmds must have been handled in the strategy handler, just
remove the decrement in scsi_eh_finish_cmd() and zero ->host_busy after
the strategy handler to fix this race.

Fixes: 50824d6c56 ("[SCSI] libsas: async ata-eh")
Cc: stable@vger.kernel.org
Signed-off-by: Wei Fang <fangwei1@huawei.com>
Reviewed-by: James Bottomley <jejb@linux.vnet.ibm.com>
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
Signed-off-by: Willy Tarreau <w@1wt.eu>
2019-07-27 21:41:57 +02:00
..
Kconfig Merge upstream linux-stable v3.10.28 into msm-3.10 2014-03-24 14:28:34 -07:00
Makefile ata: ahci: Add support for AHCI compliant MSM host controller 2013-12-24 08:16:30 +05:30
acard-ahci.c
ahci.c ahci: Intel DNV device IDs SATA 2016-02-19 14:22:41 -08:00
ahci.h
ahci_msm.c ata: ahci: Add support for AHCI compliant MSM host controller 2013-12-24 08:16:30 +05:30
ahci_platform.c Revert "arm/dt: mpq8092: Add SATA support" 2013-12-20 23:37:40 +05:30
ata_generic.c
ata_piix.c ata_piix: Add Device IDs for Intel 9 Series PCH 2014-10-05 14:54:13 -07:00
libahci.c libata: disable forced PORTS_IMPL for >= AHCI 1.3 2016-02-19 14:22:41 -08:00
libata-acpi.c
libata-core.c libata: force disable trim for SuperSSpeed S238 2015-08-03 09:29:45 -07:00
libata-eh.c scsi: fix race between simultaneous decrements of ->host_failed 2019-07-27 21:41:57 +02:00
libata-pmp.c ata: pmp: add quirk for Marvell 4140 SATA PMP 2015-08-10 12:20:31 -07:00
libata-scsi.c libata: fix HDIO_GET_32BIT ioctl 2016-03-09 15:31:54 -08:00
libata-sff.c libata: fix sff host state machine locking while polling 2016-03-03 15:06:24 -08:00
libata-transport.c libata: Fix display of sata speed 2013-12-04 10:55:51 -08:00
libata-transport.h
libata-zpodd.c libata-zpodd: must use ata_tf_init() 2013-07-25 14:07:27 -07:00
libata.h
pata_acpi.c
pata_ali.c
pata_amd.c
pata_arasan_cf.c
pata_artop.c
pata_at32.c
pata_at91.c pata_at91: fix ata_host_activate() failure handling 2014-06-07 13:25:29 -07:00
pata_atiixp.c
pata_atp867x.c
pata_bf54x.c
pata_cmd64x.c
pata_cmd640.c
pata_cs5520.c
pata_cs5530.c
pata_cs5535.c
pata_cs5536.c
pata_cypress.c
pata_efar.c
pata_ep93xx.c
pata_hpt3x2n.c
pata_hpt3x3.c
pata_hpt37x.c
pata_hpt366.c
pata_icside.c
pata_imx.c
pata_isapnp.c
pata_it821x.c
pata_it8213.c
pata_ixp4xx_cf.c
pata_jmicron.c
pata_legacy.c
pata_macio.c
pata_marvell.c
pata_mpc52xx.c
pata_mpiix.c
pata_netcell.c
pata_ninja32.c
pata_ns87410.c
pata_ns87415.c
pata_octeon_cf.c pata_octeon_cf: fix broken build 2015-06-22 16:55:54 -07:00
pata_of_platform.c
pata_oldpiix.c
pata_opti.c
pata_optidma.c
pata_palmld.c
pata_pcmcia.c
pata_pdc202xx_old.c
pata_pdc2027x.c
pata_piccolo.c
pata_platform.c
pata_pxa.c
pata_radisys.c
pata_rb532_cf.c
pata_rdc.c
pata_rz1000.c
pata_samsung_cf.c
pata_sc1200.c
pata_scc.c pata_scc: propagate return value of scc_wait_after_reset 2014-10-05 14:54:07 -07:00
pata_sch.c
pata_serverworks.c pata_serverworks: disable 64-KB DMA transfers on Broadcom OSB4 IDE Controller 2014-11-14 08:47:53 -08:00
pata_sil680.c
pata_sis.c
pata_sl82c105.c
pata_triflex.c
pata_via.c
pdc_adma.c
sata_dwc_460ex.c sata_dwc_460ex: fix resource leak on error path 2015-01-29 17:40:56 -08:00
sata_fsl.c sata_fsl: fix error handling of irq_of_parse_and_map 2014-12-16 09:09:42 -08:00
sata_highbank.c sata_highbank: increase retry count but shorten duration for Calxeda controller 2013-07-25 14:07:28 -07:00
sata_inic162x.c libata: make it clear that sata_inic162x is experimental 2013-08-04 16:50:55 +08:00
sata_mv.c ata: sata_mv: fix disk hotplug for Armada 370/XP SoCs 2014-02-06 11:08:16 -08:00
sata_nv.c
sata_promise.c
sata_promise.h
sata_qstor.c
sata_rcar.c
sata_sil.c sata_sil: disable trim 2016-03-03 15:06:22 -08:00
sata_sil24.c
sata_sis.c
sata_svw.c
sata_sx4.c
sata_uli.c
sata_via.c
sata_vsc.c
sis.h