diff options
author | Finn Thain <fthain@telegraphics.com.au> | 2019-06-08 21:19:11 -0400 |
---|---|---|
committer | Martin K. Petersen <martin.petersen@oracle.com> | 2019-06-20 15:37:03 -0400 |
commit | f9dfed1c785734b95b08d67600e05d2092508ab0 (patch) | |
tree | 06f27cd7f1ab551ef962a2361c848ae19f411c1b | |
parent | 57f31326518e98ee4cabf9a04efe00ed57c54147 (diff) |
scsi: NCR5380: Handle PDMA failure reliably
A PDMA error is handled in the core driver by setting the device's 'borken'
flag and aborting the command. Unfortunately, do_abort() is not
dependable. Perform a SCSI bus reset instead, to make sure that the command
fails and gets retried.
Cc: Michael Schmitz <schmitzmic@gmail.com>
Cc: stable@vger.kernel.org # v4.20+
Fixes: 1da177e4c3f4 ("Linux-2.6.12-rc2")
Signed-off-by: Finn Thain <fthain@telegraphics.com.au>
Tested-by: Stan Johnson <userm57@yahoo.com>
Tested-by: Michael Schmitz <schmitzmic@gmail.com>
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
-rw-r--r-- | drivers/scsi/NCR5380.c | 6 |
1 files changed, 2 insertions, 4 deletions
diff --git a/drivers/scsi/NCR5380.c b/drivers/scsi/NCR5380.c index 08e3ea8159b3..d9fa9cf2fd8b 100644 --- a/drivers/scsi/NCR5380.c +++ b/drivers/scsi/NCR5380.c | |||
@@ -1761,10 +1761,8 @@ static void NCR5380_information_transfer(struct Scsi_Host *instance) | |||
1761 | scmd_printk(KERN_INFO, cmd, | 1761 | scmd_printk(KERN_INFO, cmd, |
1762 | "switching to slow handshake\n"); | 1762 | "switching to slow handshake\n"); |
1763 | cmd->device->borken = 1; | 1763 | cmd->device->borken = 1; |
1764 | sink = 1; | 1764 | do_reset(instance); |
1765 | do_abort(instance); | 1765 | bus_reset_cleanup(instance); |
1766 | cmd->result = DID_ERROR << 16; | ||
1767 | /* XXX - need to source or sink data here, as appropriate */ | ||
1768 | } | 1766 | } |
1769 | } else { | 1767 | } else { |
1770 | /* Transfer a small chunk so that the | 1768 | /* Transfer a small chunk so that the |