summaryrefslogtreecommitdiffstats
path: root/Documentation/local_ops.txt
diff options
context:
space:
mode:
authorWei Fang <fangwei1@huawei.com>2016-06-07 14:53:56 +0800
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>2016-07-27 08:42:24 -0700
commita497efc5759fd325496b29d411b0383db5c3e153 (patch)
tree5b1ccfbf81f3739a57a26fa8058b9ddf31881304 /Documentation/local_ops.txt
parent49573f8d8fbe8b2b8cec3ded667d7f8d81539708 (diff)
downloadlinux-stable-a497efc5759fd325496b29d411b0383db5c3e153.tar.gz
linux-stable-a497efc5759fd325496b29d411b0383db5c3e153.tar.bz2
linux-stable-a497efc5759fd325496b29d411b0383db5c3e153.zip
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: 50824d6c5657 ("[SCSI] libsas: async ata-eh") 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: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Diffstat (limited to 'Documentation/local_ops.txt')
0 files changed, 0 insertions, 0 deletions