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