]> git.baikalelectronics.ru Git - kernel.git/commit
scsi: mpt3sas: fix hang on ata passthrough commands
authorJames Bottomley <James.Bottomley@HansenPartnership.com>
Sun, 1 Jan 2017 17:39:24 +0000 (09:39 -0800)
committerMartin K. Petersen <martin.petersen@oracle.com>
Tue, 17 Jan 2017 19:36:57 +0000 (14:36 -0500)
commit990f439a38973d66bfbd7a1bee350ffcc12d630b
tree229f7131a9361279f612ba993381956320eeb1ae
parent8454d4b126cc80cf79f111d3cf4162a9e0d2cf59
scsi: mpt3sas: fix hang on ata passthrough commands

mpt3sas has a firmware failure where it can only handle one pass through
ATA command at a time.  If another comes in, contrary to the SAT
standard, it will hang until the first one completes (causing long
commands like secure erase to timeout).  The original fix was to block
the device when an ATA command came in, but this caused a regression
with

commit 29ab8fd75c0dd31eefa657ab0a36ccc1d456a29e
Author: Bart Van Assche <bart.vanassche@sandisk.com>
Date:   Tue Nov 22 16:17:13 2016 -0800

    scsi: srp_transport: Move queuecommand() wait code to SCSI core

So fix the original fix of the secure erase timeout by properly
returning SAM_STAT_BUSY like the SAT recommends.  The original patch
also had a concurrency problem since scsih_qcmd is lockless at that
point (this is fixed by using atomic bitops to set and test the flag).

[mkp: addressed feedback wrt. test_bit and fixed whitespace]

Fixes: e4dac58a79c7ca8 (mpt3sas: Fix secure erase premature termination)
Signed-off-by: James Bottomley <James.Bottomley@HansenPartnership.com>
Acked-by: Sreekanth Reddy <Sreekanth.Reddy@broadcom.com>
Reviewed-by: Christoph Hellwig <hch@lst.de>
Reported-by: Ingo Molnar <mingo@kernel.org>
Tested-by: Ingo Molnar <mingo@kernel.org>
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
drivers/scsi/mpt3sas/mpt3sas_base.h
drivers/scsi/mpt3sas/mpt3sas_scsih.c