diff --git a/sm5/CHANGELOG b/sm5/CHANGELOG index 009d527d7eb026bebcd9ccf294c84d9cf5081a39..f40bd580b4f38315b48cce4cc56fad7fa1e791e6 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 a2cb2e32c8d4a9bac0933f62c5ccc035062d661b..ddcf4e912721a3e6f1eccbf75b0f8ec99b5045ba 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; }