scsi: NCR5380: Handle PDMA failure reliably [Linux 5.3]

This Linux kernel change "scsi: NCR5380: Handle PDMA failure reliably" is included in the Linux 5.3 release. This change is authored by Finn Thain <fthain [at] telegraphics.com.au> on Sun Jun 9 11:19:11 2019 +1000. The commit for this change in Linux stable tree is f9dfed1 (patch).

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>

There are 6 lines of Linux source code added/deleted in this change. Code changes to Linux kernel are as follows.

 drivers/scsi/NCR5380.c | 6 ++----
 1 file changed, 2 insertions(+), 4 deletions(-)

diff --git a/drivers/scsi/NCR5380.c b/drivers/scsi/NCR5380.c
index 08e3ea8..d9fa9cf 100644
--- a/drivers/scsi/NCR5380.c
+++ b/drivers/scsi/NCR5380.c
@@ -1761,10 +1761,8 @@ static void NCR5380_information_transfer(struct Scsi_Host *instance)
                        scmd_printk(KERN_INFO, cmd,
                            "switching to slow handshake\n");
                        cmd->device->borken = 1;
-                       sink = 1;
-                       do_abort(instance);
-                       cmd->result = DID_ERROR << 16;
-                       /* XXX - need to source or sink data here, as appropriate */
+                       do_reset(instance);
+                       bus_reset_cleanup(instance);
                    }
                } else {
                    /* Transfer a small chunk so that the

Leave a Reply

Your email address will not be published. Required fields are marked *