summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorFinn Thain <fthain@telegraphics.com.au>2019-06-08 21:19:11 -0400
committerMartin K. Petersen <martin.petersen@oracle.com>2019-06-20 15:37:03 -0400
commitf9dfed1c785734b95b08d67600e05d2092508ab0 (patch)
tree06f27cd7f1ab551ef962a2361c848ae19f411c1b
parent57f31326518e98ee4cabf9a04efe00ed57c54147 (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.c6
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