diff --git a/sm5/smartd.c b/sm5/smartd.c index f986eb51822a910f44ff1b8feb609448a3bdef6a..b9bd4e07688b7d7859f68f78d198dbac3f2ad369 100644 --- a/sm5/smartd.c +++ b/sm5/smartd.c @@ -65,7 +65,7 @@ extern const char *atacmdnames_c_cvsid, *atacmds_c_cvsid, *ataprint_c_cvsid, *escalade_c_cvsid, *knowndrives_c_cvsid, *os_XXXX_c_cvsid, *scsicmds_c_cvsid, *utility_c_cvsid; -const char *smartd_c_cvsid="$Id: smartd.c,v 1.241 2003/11/17 11:50:44 dpgilbert Exp $" +const char *smartd_c_cvsid="$Id: smartd.c,v 1.242 2003/11/18 13:49:43 dpgilbert Exp $" ATACMDS_H_CVSID ATAPRINT_H_CVSID CONFIG_H_CVSID EXTERN_H_CVSID KNOWNDRIVES_H_CVSID SCSICMDS_H_CVSID SMARTD_H_CVSID UTILITY_H_CVSID; @@ -1015,14 +1015,18 @@ static int SCSIDeviceScan(cfgfile *cfg) { // that various USB devices that malform the response will lock up // if asked for a log page (e.g. temperature) so it is best to // bail out now. - if ((err = scsiFetchIECmpage(fd, &iec, cfg->modese_len))) { + err = scsiFetchIECmpage(fd, &iec, cfg->modese_len); + if (0 == err) + cfg->modese_len = iec.modese_len; + else if (SIMPLE_ERR_BAD_FIELD == err) + ; /* continue since it is reasonable not to support IE mpage */ + else { /* any other error (including malformed response) unreasonable */ PrintOut(LOG_INFO, - "Device: %s, Fetch of IEC (SMART) mode page failed, err=%d, skip device\n", device, err); + "Device: %s, Bad IEC (SMART) mode page, err=%d, skip device\n", + device, err); CloseDevice(fd, device); return 3; } - else - cfg->modese_len = iec.modese_len; // N.B. The following is passive (i.e. it doesn't attempt to turn on // smart if it is off). This may change to be the same as the ATA side. diff --git a/sm5/smartd.cpp b/sm5/smartd.cpp index 0c9b7696b94b9178a5f9ffb1e8b5ad5ab027caba..bb19ea9d00f830ee09747d35c2f01b3e3e92555d 100644 --- a/sm5/smartd.cpp +++ b/sm5/smartd.cpp @@ -65,7 +65,7 @@ extern const char *atacmdnames_c_cvsid, *atacmds_c_cvsid, *ataprint_c_cvsid, *escalade_c_cvsid, *knowndrives_c_cvsid, *os_XXXX_c_cvsid, *scsicmds_c_cvsid, *utility_c_cvsid; -const char *smartd_c_cvsid="$Id: smartd.cpp,v 1.241 2003/11/17 11:50:44 dpgilbert Exp $" +const char *smartd_c_cvsid="$Id: smartd.cpp,v 1.242 2003/11/18 13:49:43 dpgilbert Exp $" ATACMDS_H_CVSID ATAPRINT_H_CVSID CONFIG_H_CVSID EXTERN_H_CVSID KNOWNDRIVES_H_CVSID SCSICMDS_H_CVSID SMARTD_H_CVSID UTILITY_H_CVSID; @@ -1015,14 +1015,18 @@ static int SCSIDeviceScan(cfgfile *cfg) { // that various USB devices that malform the response will lock up // if asked for a log page (e.g. temperature) so it is best to // bail out now. - if ((err = scsiFetchIECmpage(fd, &iec, cfg->modese_len))) { + err = scsiFetchIECmpage(fd, &iec, cfg->modese_len); + if (0 == err) + cfg->modese_len = iec.modese_len; + else if (SIMPLE_ERR_BAD_FIELD == err) + ; /* continue since it is reasonable not to support IE mpage */ + else { /* any other error (including malformed response) unreasonable */ PrintOut(LOG_INFO, - "Device: %s, Fetch of IEC (SMART) mode page failed, err=%d, skip device\n", device, err); + "Device: %s, Bad IEC (SMART) mode page, err=%d, skip device\n", + device, err); CloseDevice(fd, device); return 3; } - else - cfg->modese_len = iec.modese_len; // N.B. The following is passive (i.e. it doesn't attempt to turn on // smart if it is off). This may change to be the same as the ATA side.