From 215626fe455594914eba3606ec3ddc9bd733f69b Mon Sep 17 00:00:00 2001
From: chrfranke <chrfranke@4ea69e1a-61f1-4043-bf83-b5c94c648137>
Date: Fri, 6 Mar 2009 22:23:04 +0000
Subject: [PATCH] Add forgotten SCSI sense checks to class usbjmicron_device

git-svn-id: https://smartmontools.svn.sourceforge.net/svnroot/smartmontools/trunk@2749 4ea69e1a-61f1-4043-bf83-b5c94c648137
---
 sm5/CHANGELOG   |  4 +++-
 sm5/scsiata.cpp | 22 +++++++++++++++++++++-
 2 files changed, 24 insertions(+), 2 deletions(-)

diff --git a/sm5/CHANGELOG b/sm5/CHANGELOG
index 009d527d7..f40bd580b 100644
--- a/sm5/CHANGELOG
+++ b/sm5/CHANGELOG
@@ -1,6 +1,6 @@
 CHANGELOG for smartmontools
 
-$Id: CHANGELOG,v 1.779 2009/03/03 20:23:55 chrfranke Exp $
+$Id: CHANGELOG,v 1.780 2009/03/06 22:23:04 chrfranke Exp $
 
 The most recent version of this file is:
 http://smartmontools.cvs.sourceforge.net/smartmontools/sm5/CHANGELOG?view=markup
@@ -41,6 +41,8 @@ NOTES FOR FUTURE RELEASES: see TODO file.
 
 <DEVELOPERS: ADDITIONS TO THE CHANGE LOG GO JUST BELOW HERE, PLEASE>
 
+  [CF] Add forgotten SCSI sense checks to class usbjmicron_device.
+
   [CF] Add new SMART STATUS check command for JMicron USB bridges.
        Should support also older chip versions and prevents a race
        condition.
diff --git a/sm5/scsiata.cpp b/sm5/scsiata.cpp
index a2cb2e32c..ddcf4e912 100644
--- a/sm5/scsiata.cpp
+++ b/sm5/scsiata.cpp
@@ -51,7 +51,7 @@
 #include "dev_ata_cmd_set.h" // ata_device_with_command_set
 #include "dev_tunnelled.h" // tunnelled_device<>
 
-const char *scsiata_c_cvsid="$Id: scsiata.cpp,v 1.23 2009/03/03 20:23:55 chrfranke Exp $"
+const char *scsiata_c_cvsid="$Id: scsiata.cpp,v 1.24 2009/03/06 22:23:04 chrfranke Exp $"
 CONFIG_H_CVSID EXTERN_H_CVSID INT64_H_CVSID SCSICMDS_H_CVSID SCSIATA_H_CVSID UTILITY_H_CVSID;
 
 /* for passing global control variables */
@@ -938,6 +938,16 @@ bool usbjmicron_device::ata_pass_through(const ata_cmd_in & in, ata_cmd_out & ou
     return set_err(scsidev->get_err());
   }
 
+  scsi_sense_disect sinfo;
+  scsi_do_sense_disect(&io_hdr, &sinfo);
+  int err = scsiSimpleSenseFilter(&sinfo);
+  if (err) {
+    if (con->reportscsiioctl > 0)
+      pout("usbjmicron_device::ata_pass_through: scsi error: %s\n",
+           scsiErrString(err));
+    return set_err(EIO, "scsi error %s", scsiErrString(err));
+  }
+
   if (in.out_needed.is_set()) {
     if (is_smart_status) {
       switch (smart_status) {
@@ -1013,6 +1023,16 @@ bool usbjmicron_device::get_registers(unsigned short addr,
     return set_err(scsidev->get_err());
   }
 
+  scsi_sense_disect sinfo;
+  scsi_do_sense_disect(&io_hdr, &sinfo);
+  int err = scsiSimpleSenseFilter(&sinfo);
+  if (err) {
+    if (con->reportscsiioctl > 0)
+      pout("usbjmicron_device::get_registers: scsi error: %s\n",
+           scsiErrString(err));
+    return set_err(EIO, "scsi error %s", scsiErrString(err));
+  }
+
   return true;
 }
 
-- 
GitLab