-$Id: ChangeLog 3812 2013-04-20 18:59:19Z chrfranke $
+$Id: ChangeLog 3841 2013-07-26 17:38:57Z chrfranke $
+
+2013-07-26 Christian Franke <franke@computer.org>
+
+ smartmontools 6.2
+
+2013-07-25 Christian Franke <franke@computer.org>
+
+ drivedb.h:
+ - SandForce Driven SSDs: ADATA SP900
+ - Transcend CompactFlash Cards: *GCF150
+ - Hitachi/HGST Travelstar 5K750: Apple OEM
+ - Hitachi/HGST Travelstar Z7K500
+ - Hitachi/HGST Travelstar 7K750
+ - Hitachi Deskstar 5K3000: *BLE630 OEM
+ - Seagate Constellation ES.3
+ - Western Digital Caviar Blue (SATA): Rename, add WD1602ABKS
+ - Western Digital Caviar Blue (SATA 6Gb/s): Rename, add WD10EZEX
+ - USB: Toshiba Canvio 3.0 Portable Hard Drive (0x0480:0xa007)
+ - USB: Toshiba Canvio Desktop (0x0480:0xd010)
+ - USB: Seagate FreeAgent Desk (0x0bc2:0x3008)
+ - USB: Sharkoon 2-Bay RAID Box (0x6795:0x2756)
+
+2013-07-21 Christian Franke <franke@computer.org>
+
+ utility.cpp: Add check for empty subexpressions in regular expressions.
+
+2013-07-21 Christian Franke <franke@computer.org>
+
+ drivedb.h:
+ - Crucial/Micron RealSSD C300/M500: Rename, add M500
+ - SandForce Driven SSDs: Kingston KC300, MS200
+ - Intel 320 Series SSDs: *A variant
+ - Intel 330/335 Series SSDs: Rename, add 335 Series
+ - Toshiba 2.5" HDD MK..46GSX
+ - Toshiba 2.5" HDD MK..61GSY[N]: Rename, add *GSY variant
+ - Toshiba 2.5" HDD MK..65GSX: *GSXF variant
+ - Toshiba 3.5" HDD DT01ACA...
+ - Seagate Laptop SSHD
+ - Seagate Constellation ES.2: 2GB
+ - USB: Seagate Expansion External (0x0bc2:0x3320)
+ - USB: Seagate Backup Plus Desktop USB 3.0 (0x0bc2:0xa0a1)
+ - USB: WD Elements (0x1058:0x10a2)
+
+2013-07-20 Christian Franke <franke@computer.org>
+
+ dev_areca.cpp: Fix possible segfault on empty port.
+
+2013-07-20 Christian Franke <franke@computer.org>
+
+ os_win32/daemon_win32.cpp: Do not install the service as interactive.
+ This is no longer supported since Vista and produces misleading error
+ messages in event log.
+
+2013-07-20 Christian Franke <franke@computer.org>
+
+ ataprint.cpp: Do not print 'SCT Commands not supported' if SCT is
+ not used (regression from r3825 r3826).
+ smartctl.8.in: Mark '-g/-s wcreorder' as EXPERIMENTAL.
+
+2013-07-18 Christian Franke <franke@computer.org>
+
+ os_win32.cpp: Add Win-8.1 and 2012r2 to get_os_version_str(),
+ remove 9x/ME and NT4.
+
+2013-07-08 Alex Samorukov <samm@os2.kiev.ua>
+
+ Add Automake 1.12.2 to the list of supported versions
+
+2013-07-07 Christian Franke <franke@computer.org>
+
+ configure.ac: Support SVN 1.8 working copy format.
+
+2013-07-06 Alex Samorukov <samm@os2.kiev.ua>
+
+ smartctl: Added ATA Write Cache Reordering control using "-g wcreorder"
+ and "-s wcreorder[,on|off]" options (bug #221)
+ smartctl: minor formatting fixes
+
+2013-07-05 Alex Samorukov <samm@os2.kiev.ua>
+
+ HPT RAID support: maximum disk number now is 128 (#281)
+
+2013-06-28 Alex Samorukov <samm@os2.kiev.ua>
+
+ drivedb.h:
+ - Apacer SDM4 2Gb SSD
+
+2013-06-17 Alex Samorukov <samm@os2.kiev.ua>
+
+ scsicmds.cpp: fix build on RedHat 9
+ os_freebsd.cpp: skip port multipliers on FreeBSD
+ drivedb.h:
+ - OWC Mercury EXTREME Pro 6G SSD (from #277)
+ - USB: Fujitsu SATA-to-USB3.0 bridge chip (#280)
+
+2013-06-12 Alex Samorukov <samm@os2.kiev.ua>
+
+ drivedb.h:
+ - JMicron SSD: P400e/P400m series
+
+2013-06-09 Christian Franke <franke@computer.org>
+
+ INSTALL, NEWS, README, WARNINGS: Update SVN repository URLs.
+
+2013-06-09 Christian Franke <franke@computer.org>
+
+ os_win32/smartd_warning.cmd: Using %DATE% in temp file names
+ breaks the script if localized date contains '/'
+ (This fix is already included in smartmontools-6.1-2.win32-setup.exe).
+
+2013-06-06 Christian Franke <franke@computer.org>
+
+ os_win32/update-smart-drivedb.nsi: Use new SVN repository for
+ download.
+
+2013-06-04 Christian Franke <franke@computer.org>
+
+ update-smart-drivedb.in: Use new sourceforge code browser for
+ download.
2013-04-20 Christian Franke <franke@computer.org>
Smartmontools installation instructions
=======================================
-$Id: INSTALL 3713 2012-11-23 21:26:17Z chrfranke $
+$Id: INSTALL 3817 2013-06-09 16:59:50Z chrfranke $
Please also see the smartmontools home page:
http://smartmontools.sourceforge.net/
=======================
Get the sources from the SVN repository:
- svn co https://smartmontools.svn.sourceforge.net/svnroot/smartmontools/trunk/smartmontools smartmontools
+ svn co http://svn.code.sf.net/p/smartmontools/code/trunk/smartmontools smartmontools
Then type:
./autogen.sh
smartmontools NEWS
------------------
-$Id: NEWS 3808 2013-04-18 17:30:12Z chrfranke $
+$Id: NEWS 3841 2013-07-26 17:38:57Z chrfranke $
The most up-to-date version of this file is:
-http://smartmontools.svn.sourceforge.net/viewvc/smartmontools/trunk/smartmontools/NEWS?view=markup
+http://sourceforge.net/p/smartmontools/code/HEAD/tree/trunk/smartmontools/NEWS
-Date <Not released yet, please try current SVN>
+Date 2013-07-26
Summary: smartmontools release 6.2
-----------------------------------------------------------
+- smartctl: Added ATA write cache reordering control using
+ '-g wcreorder' and '-s wcreorder,[on|off]' options.
+- update-smart-drivedb: Updated for new SVN repository.
+- HDD, SSD and USB additions to drive database.
+- Areca RAID support: Fixed possible segfault on empty port.
+- HPT RAID support: Maximum disk number increased to 128.
+- Linux: RHEL 9 compile fixes.
+- FreeBSD: Device scanning now skips port multipliers.
- Cygwin: 64-bit compile fixes.
+- Windows: Fixed bogus temp file name in smartd_warning.cmd
+ (already included in smartmontools-6.1-2.win32-setup.exe).
+- Windows: smartd service is no longer installed as interactive.
Date 2013-03-16
Summary: smartmontools release 6.1
OSX, FreeBSD, Linux, NetBSD, OpenBSD, Solaris, and Windows.
==========================================================
-$Id: README 3727 2012-12-13 17:23:06Z samm2 $
+$Id: README 3817 2013-06-09 16:59:50Z chrfranke $
== HOME ==
The home for smartmontools is located at:
Source tarballs
---------------
-http://sourceforge.net/project/showfiles.php?group_id=64297
+http://sourceforge.net/projects/smartmontools/files/
SVN
---
-svn co https://smartmontools.svn.sourceforge.net/svnroot/smartmontools/trunk/smartmontools smartmontools
+svn co http://svn.code.sf.net/p/smartmontools/code/trunk/smartmontools smartmontools
This will create a subdirectory called smartmontools containing the code.
To instead get the 5.38 release:
-svn co https://smartmontools.svn.sourceforge.net/svnroot/smartmontools/tags/RELEASE_5_38/sm5 smartmontools
+svn co http://svn.code.sf.net/p/smartmontools/code/tags/RELEASE_5_38/sm5 smartmontools
You can see what the different tags are by looking at
-http://smartmontools.svn.sourceforge.net/viewvc/smartmontools/tags/
+http://sourceforge.net/p/smartmontools/code/HEAD/tree/tags/
== BUILDING/INSTALLING SMARTMONTOOLS ==
-$Id: WARNINGS 2844 2009-07-18 12:59:21Z chrfranke $
+$Id: WARNINGS 3817 2013-06-09 16:59:50Z chrfranke $
The most recent version of this file can be found here:
-http://smartmontools.svn.sourceforge.net/viewvc/smartmontools/trunk/smartmontools/WARNINGS?view=markup
+http://sourceforge.net/p/smartmontools/code/HEAD/tree/trunk/smartmontools/WARNINGS
The following are reports of serious problems (eg system lockup) which
were due to smartmontools. There are DARWIN, LINUX, FREEBSD, SOLARIS
#include "utility.h"
#include "dev_ata_cmd_set.h" // for parsed_ata_device
-const char * atacmds_cpp_cvsid = "$Id: atacmds.cpp 3777 2013-02-19 18:32:15Z samm2 $"
+const char * atacmds_cpp_cvsid = "$Id: atacmds.cpp 3825 2013-07-06 21:38:25Z samm2 $"
ATACMDS_H_CVSID;
// Print ATA debug messages?
return 0;
}
+// Get/Set Write Cache Reordering
+int ataGetSetSCTWriteCacheReordering(ata_device * device, bool enable, bool persistent, bool set)
+{
+ // Check initial status
+ ata_sct_status_response sts;
+ if (ataReadSCTStatus(device, &sts))
+ return -1;
+
+ // Do nothing if other SCT command is executing
+ if (sts.ext_status_code == 0xffff) {
+ pout("Another SCT command is executing, abort Feature Control\n"
+ "(SCT ext_status_code 0x%04x, action_code=%u, function_code=%u)\n",
+ sts.ext_status_code, sts.action_code, sts.function_code);
+ return -1;
+ }
+
+ ata_sct_feature_control_command cmd; memset(&cmd, 0, sizeof(cmd));
+ // CAUTION: DO NOT CHANGE THIS VALUE (SOME ACTION CODES MAY ERASE DISK)
+ cmd.action_code = 4; // Feature Control command
+ cmd.function_code = (set ? 1 : 2); // 1=Set, 2=Get
+ cmd.feature_code = 2; // Enable/Disable Write Cache Reordering
+ cmd.state = (enable ? 1 : 2); // 1 enable, 2 disable
+ cmd.option_flags = (persistent ? 0x01 : 0x00);
+
+ // swap endian order if needed
+ if (isbigendian()) {
+ swapx(&cmd.action_code);
+ swapx(&cmd.function_code);
+ swapx(&cmd.feature_code);
+ swapx(&cmd.state);
+ swapx(&cmd.option_flags);
+ }
+
+ // write command via SMART log page 0xe0
+ // TODO: Debug output
+ ata_cmd_in in;
+ in.in_regs.command = ATA_SMART_CMD;
+ in.in_regs.lba_high = SMART_CYL_HI; in.in_regs.lba_mid = SMART_CYL_LOW;
+ in.in_regs.features = ATA_SMART_WRITE_LOG_SECTOR;
+ in.in_regs.lba_low = 0xe0;
+ in.set_data_out(&cmd, 1);
+
+ if (!set)
+ // Time limit returned in ATA registers
+ in.out_needed.sector_count = in.out_needed.lba_low = true;
+
+ ata_cmd_out out;
+ if (!device->ata_pass_through(in, out)) {
+ pout("Write SCT (%cet) XXX Error Recovery Control Command failed: %s\n",
+ (!set ? 'G' : 'S'), device->get_errmsg());
+ return -1;
+ }
+ int state = out.out_regs.sector_count | (out.out_regs.lba_low << 8);
+
+ // re-read and check SCT status
+ if (ataReadSCTStatus(device, &sts))
+ return -1;
+
+ if (!(sts.ext_status_code == 0 && sts.action_code == 4 && sts.function_code == (set ? 1 : 2))) {
+ pout("Unexpected SCT status 0x%04x (action_code=%u, function_code=%u)\n",
+ sts.ext_status_code, sts.action_code, sts.function_code);
+ return -1;
+ }
+ return state;
+}
+
+
// Set SCT Temperature Logging Interval
int ataSetSCTTempInterval(ata_device * device, unsigned interval, bool persistent)
{
#ifndef ATACMDS_H_
#define ATACMDS_H_
-#define ATACMDS_H_CVSID "$Id: atacmds.h 3632 2012-10-09 10:10:53Z chrfranke $"
+#define ATACMDS_H_CVSID "$Id: atacmds.h 3825 2013-07-06 21:38:25Z samm2 $"
#include "dev_interface.h" // ata_device
// returns 1 if SMART supported, 0 if not supported or can't tell
int ataSmartSupport(const ata_identify_device * drive);
+// Return values:
+// 1: Write Cache Reordering enabled
+// 2: Write Cache Reordering disabled
+// -1: error
+int ataGetSetSCTWriteCacheReordering(ata_device * device, bool enable, bool persistent, bool set);
+
// Return values:
// 1: SMART enabled
// 0: SMART disabled
#include "utility.h"
#include "knowndrives.h"
-const char * ataprint_cpp_cvsid = "$Id: ataprint.cpp 3786 2013-03-07 22:09:17Z chrfranke $"
+const char * ataprint_cpp_cvsid = "$Id: ataprint.cpp 3831 2013-07-20 14:25:56Z chrfranke $"
ATAPRINT_H_CVSID;
|| options.sct_temp_int
|| options.sct_erc_get
|| options.sct_erc_set
+ || options.sct_wcache_reorder_get
+ || options.sct_wcache_reorder_set
);
// Exit if no further options specified
if (options.get_security)
print_ata_security_status("ATA Security is: ", drive.words088_255[128-88]);
+ // Check if SCT commands available
+ bool sct_ok = false;
+ if (need_sct_support) {
+ if (!isSCTCapable(&drive)) {
+ failuretest(OPTIONAL_CMD, returnval|=FAILSMART);
+ }
+ else
+ sct_ok = true;
+ }
+
+ // Print write cache reordering status
+ if (sct_ok && options.sct_wcache_reorder_get) {
+ int wcache_reorder=ataGetSetSCTWriteCacheReordering(device,
+ false /* enable */, false /* persistent */, false /*set*/);
+ pout("Wt Cache Reorder: ");
+ switch(wcache_reorder) {
+ case 0: /* not defined in standard but returned on some drives if not set */
+ pout("Unknown"); break;
+ case 1:
+ pout("Enabled"); break;
+ case 2:
+ pout("Disabled"); break;
+ default: /* error? */
+ pout("N/A"); break;
+ }
+ pout("\n");
+ }
+ if (!sct_ok && options.sct_wcache_reorder_get) {
+ pout("Wt Cache Reorder: Unavailable\n");
+ }
+
// Print remaining drive info
if (options.drive_info) {
// Print the (now possibly changed) power mode if available
// START OF THE ENABLE/DISABLE SECTION OF THE CODE
if ( options.smart_disable || options.smart_enable
|| options.smart_auto_save_disable || options.smart_auto_save_enable
- || options.smart_auto_offl_disable || options.smart_auto_offl_enable)
+ || options.smart_auto_offl_disable || options.smart_auto_offl_enable
+ || options.set_aam || options.set_apm || options.set_lookahead
+ || options.set_wcache || options.set_security_freeze || options.set_standby
+ || options.sct_wcache_reorder_set)
pout("=== START OF ENABLE/DISABLE COMMANDS SECTION ===\n");
// Enable/Disable AAM
pout("Write cache %sabled\n", (enable ? "en" : "dis"));
}
+ // Enable/Disable write cache reordering
+ if (sct_ok && options.sct_wcache_reorder_set) {
+ bool enable = (options.sct_wcache_reorder_set > 0);
+
+ int wcache_reorder=ataGetSetSCTWriteCacheReordering(device,
+ enable, false /* persistent */, true /*set*/);
+
+ if (wcache_reorder < 0) {
+ pout("Write cache reordering %sable failed: %s\n", (enable ? "en" : "dis"), device->get_errmsg());
+ returnval |= FAILSMART;
+ }
+ else
+ pout("Write cache reordering %sabled\n", (enable ? "en" : "dis"));
+ }
+
// Freeze ATA security
if (options.set_security_freeze) {
if (!ata_nodata_command(device, ATA_SECURITY_FREEZE_LOCK)) {
// all this for a newline!
if ( options.smart_disable || options.smart_enable
|| options.smart_auto_save_disable || options.smart_auto_save_enable
- || options.smart_auto_offl_disable || options.smart_auto_offl_enable)
+ || options.smart_auto_offl_disable || options.smart_auto_offl_enable
+ || options.set_aam || options.set_apm || options.set_lookahead
+ || options.set_wcache || options.set_security_freeze || options.set_standby
+ || options.sct_wcache_reorder_set)
pout("\n");
// START OF READ-ONLY OPTIONS APART FROM -V and -i
}
}
- // SCT commands
- bool sct_ok = false;
- if (need_sct_support) {
- if (!isSCTCapable(&drive)) {
- pout("SCT Commands not supported\n\n");
- failuretest(OPTIONAL_CMD, returnval|=FAILSMART);
- }
- else
- sct_ok = true;
- }
+ if(!sct_ok && (options.sct_temp_sts || options.sct_temp_hist || options.sct_temp_int
+ || options.sct_erc_get || options.sct_erc_set ))
+ pout("SCT Commands not supported\n\n");
// Print SCT status and temperature history table
if (sct_ok && (options.sct_temp_sts || options.sct_temp_hist || options.sct_temp_int)) {
#ifndef ATAPRINT_H_
#define ATAPRINT_H_
-#define ATAPRINT_H_CVSID "$Id: ataprint.h 3609 2012-09-20 21:24:43Z chrfranke $\n"
+#define ATAPRINT_H_CVSID "$Id: ataprint.h 3825 2013-07-06 21:38:25Z samm2 $\n"
#include <vector>
bool set_security_freeze; // Freeze ATA security
bool get_wcache; // print write cache status
int set_wcache; // disable(-1), enable(1) write cache
+ bool sct_wcache_reorder_get; // print write cache reordering status
+ int sct_wcache_reorder_set; // disable(-1), enable(1) write cache reordering
ata_print_options()
: drive_info(false),
get_lookahead(false), set_lookahead(0),
set_standby(0), set_standby_now(false),
get_security(false), set_security_freeze(false),
- get_wcache(false), set_wcache(0)
+ get_wcache(false), set_wcache(0),
+ sct_wcache_reorder_get(false), sct_wcache_reorder_set(0)
{ }
};
#!/bin/sh
-# $Id: autogen.sh 3748 2013-01-18 20:12:44Z chrfranke $
+# $Id: autogen.sh 3829 2013-07-08 15:13:16Z samm2 $
#
# Generate ./configure from config.in and Makefile.in from Makefile.am.
# This also adds files like missing,depcomp,install-sh to the source
rm -f casetest.tmp
;;
- 1.9.[1-6]|1.10|1.10.[12]|1.11|1.11.[1-6]|1.12.[3-5])
+ 1.9.[1-6]|1.10|1.10.[12]|1.11|1.11.[1-6]|1.12.[2-5])
# OK
;;
#
-# $Id: configure.ac 3811 2013-04-20 17:10:41Z chrfranke $
+# $Id: configure.ac 3841 2013-07-26 17:38:57Z chrfranke $
#
dnl Process this file with autoconf to produce a configure script.
AC_PREREQ(2.50)
AC_CONFIG_SRCDIR(smartctl.cpp)
smartmontools_configure_date=`date -u +'%Y-%m-%d %T %Z'`
-smartmontools_cvs_tag=`echo '$Id: configure.ac 3811 2013-04-20 17:10:41Z chrfranke $'`
-smartmontools_release_date=2013-03-16
-smartmontools_release_time="14:35:27 UTC"
+smartmontools_cvs_tag=`echo '$Id: configure.ac 3841 2013-07-26 17:38:57Z chrfranke $'`
+smartmontools_release_date=2013-07-26
+smartmontools_release_time="17:38:20 UTC"
AC_DEFINE_UNQUOTED(SMARTMONTOOLS_CONFIGURE_ARGS, "$ac_configure_args", [smartmontools Configure Arguments])
AC_DEFINE_UNQUOTED(SMARTMONTOOLS_CONFIGURE_DATE, "$smartmontools_configure_date", [smartmontools Configure Date])
AC_MSG_CHECKING([whether this is a build from SVN])
is_svn_build=no
svn_deps=
-if test -f "$srcdir/.svn/entries"; then
+if test -f "$srcdir/.svn/wc.db"; then
+ # SVN 1.7, 1.8 working copy
+ svn_deps='${srcdir}/.svn/wc.db'
+elif test -f "${srcdir}/.svn/entries"; then
+ # SVN <= 1.6 working copy (SVN 1.7 has empty entries file)
+ svn_deps='${srcdir}/.svn/entries'
+fi
+if test -n "$svn_deps"; then
is_svn_build=unknown
if (cd "$srcdir" && svn --version && svnversion && svn info) >/dev/null 2>&1; then
is_svn_build=yes
- svn_deps='${srcdir}/.svn/entries'
- # SVN 1.7 working copy?
- test -f "$srcdir/.svn/wc.db" && svn_deps='${srcdir}/.svn/wc.db'
fi
fi
AC_SUBST([svn_deps])
#include "dev_interface.h"
#include "dev_areca.h"
-const char * dev_areca_cpp_cvsid = "$Id: dev_areca.cpp 3803 2013-03-24 18:52:54Z chrfranke $"
+const char * dev_areca_cpp_cvsid = "$Id: dev_areca.cpp 3835 2013-07-20 18:37:19Z chrfranke $"
DEV_ARECA_H_CVSID;
#include "atacmds.h"
// ----- BEGIN TO SEND TO ARECA DRIVER ------
expected = arcmsr_ui_handler(areca_packet, areca_packet_len, return_buff);
- if ( expected < 0 )
- {
- return set_err(EIO);
- }
+
+ if (expected < 0)
+ return set_err(EIO, "arcmsr_scsi_pass_through: I/O error");
+ if (expected < 15) // 7 bytes if port is empty
+ return set_err(EIO, "arcmsr_scsi_pass_through: missing data (%d bytes, expected %d)", expected, 15);
int scsi_status = return_buff[5];
int in_data_len = return_buff[11] | return_buff[12] << 8 | return_buff[13] << 16 | return_buff[14] << 24;
/*
const drive_settings builtin_knowndrives[] = {
*/
- { "$Id: drivedb.h 3812 2013-04-20 18:59:19Z chrfranke $",
+ { "$Id: drivedb.h 3840 2013-07-25 21:29:08Z chrfranke $",
"-", "-",
"This is a dummy entry to hold the SVN-Id of drivedb.h",
""
"APPLE SSD SM128",
"", "", ""
},
+ { "Apacer SDM4",
+ "2GB SATA Flash Drive", // tested with APSDM002G15AN-CT/SFI2101D
+ "SFI2101D", "",
+ "-v 160,raw48,Initial_Bad_Block_Count "
+ "-v 161,raw48,Bad_Block_Count "
+ "-v 162,raw48,Spare_Block_Count "
+ "-v 163,raw48,Max_Erase_Count "
+ "-v 164,raw48,Min_Erase_Count " // could be wrong
+ "-v 165,raw48,Average_Erase_Count " // could be wrong
+ },
{ "Asus-Phison SSD",
"ASUS-PHISON SSD",
"", "", ""
},
- { "Crucial/Micron RealSSD C300", // Marvell 88SS9174 BJP2
- "C300-CTFDDA[AC](064|128|256)MAG", // tested with C300-CTFDDAC128MAG/0002,
+ { "Crucial/Micron RealSSD C300/M500", // Marvell 88SS91xx
+ "C300-CTFDDA[AC](064|128|256)MAG|" // Marvell 88SS9174 BJP2, tested with C300-CTFDDAC128MAG/0002,
// C300-CTFDDAC064MAG/0006
+ "Crucial_CT(120|240|480)M500SSD3", // Marvell 88SS9187 BLD2, tested with Crucial_CT120M500SSD3/MU02
"", "",
//"-v 1,raw48,Raw_Read_Error_Rate "
//"-v 5,raw16(raw16),Reallocated_Sector_Ct "
"-v 202,raw48,Perc_Rated_Life_Used "
"-v 206,raw48,Write_Error_Rate"
},
- { "Crucial/Micron RealSSD m4/C400", // Marvell 9176, fixed firmware
+ { "Crucial/Micron RealSSD m4/C400/P400", // Marvell 9176, fixed firmware
"C400-MTFDDA[ACK](064|128|256|512)MAM|"
- "M4-CT(064|128|256|512)M4SSD[23]", // tested with M4-CT512M4SSD2/0309
+ "M4-CT(064|128|256|512)M4SSD[23]|" // tested with M4-CT512M4SSD2/0309
+ "MTFDDAK(064|128|256|512|050|100|200|400)MA[RN]-1[JKS]1AA.*", // tested with
+ // MTFDDAK256MAR-1K1AA/MA52
"030[9-Z]|03[1-Z].|0[4-Z]..|[1-Z]....*", // >= "0309"
"",
//"-v 1,raw48,Raw_Read_Error_Rate "
"SandForce 1st Ed\\.|" // Demo Drive, tested with firmware 320A13F0
"ADATA SSD S(396|510|599) .?..GB|" // tested with ADATA SSD S510 60GB/320ABBF0,
// ADATA SSD S599 256GB/3.1.0, 64GB/3.4.6
+ "ADATA SP900|" // Premier Pro, SF-2281, tested with ADATA SP900/5.0.6
"Corsair CSSD-F(40|60|80|115|120|160|240)GBP?2.*|" // Corsair Force, tested with
// Corsair CSSD-F40GB2/1.1, Corsair CSSD-F115GB2-A/2.1a
"Corsair Force (3 SSD|GS|GT)|" // SF-2281, tested with
// FTM24CT25H/STTMP2P1
"KINGSTON SH10[03]S3(90|120|240|480)G|" // HyperX (3K), SF-2281, tested with
// SH100S3240G/320ABBF0, SH103S3120G/505ABBF0
+ "KINGSTON SKC300S37A(60|120|240|480)G|" // SF-2281, tested with SKC300S37A120G/KC4ABBF0
"KINGSTON SVP200S3(7A)?(60|90|120|240|480)G|" // V+ 200, SF-2281, tested with
// SVP200S37A480G/502ABBF0, SVP200S390G/332ABBF0
+ "KINGSTON SMS200S3(30|60|120)G|" // mSATA, SF-2241, tested with SMS200S3120G/KC3ABBF0
"KINGSTON SMS450S3(32|64|128)G|" // mSATA, SF-2281, tested with SMS450S3128G/503ABBF0
"KINGSTON (SV300|SKC100|SE100)S3.*G|" // other SF-2281
"MKNSSDCR(45|60|90|120|180|240|480)GB(-DX)?|" // Mushkin Chronos (deluxe), SF-2281,
// OWC Mercury Electra 6G SSD/502ABBF0
"OWC Mercury Extreme Pro (RE )?SSD|" // tested with
// OWC Mercury Extreme Pro SSD/360A13F0
+ "OWC Mercury EXTREME Pro 6G SSD|" // tested with
+ // OWC Mercury EXTREME Pro 6G SSD/507ABBF0
"Patriot Pyro|" // tested with Patriot Pyro/332ABBF0
"SanDisk SDSSDX(60|120|240|480)GG25|" // SanDisk Extreme, SF-2281, tested with
// SDSSDX240GG25/R201
"-v 242,raw48,Host_Reads_32MiB"
},
{ "Intel 320 Series SSDs", // tested with INTEL SSDSA2CT040G3/4PC10362,
- // INTEL SSDSA2CW160G3/4PC10362, INTEL SSDSA2BT040G3/4PC10362
- "INTEL SSDSA[12][BC][WT](040|080|120|160|300|600)G3",
+ // INTEL SSDSA2CW160G3/4PC10362, INTEL SSDSA2BT040G3/4PC10362, INTEL SSDSA2BW120G3A/4PC10362
+ "INTEL SSDSA[12][BC][WT](040|080|120|160|300|600)G3A?",
"", "",
"-F nologdir "
//"-v 3,raw16(avg16),Spin_Up_Time "
"-v 242,raw48,Host_Reads_32MiB "
"-v 249,raw48,NAND_Writes_1GiB"
},
- { "Intel 330 Series SSDs", // tested with INTEL SSDSC2CT180A3/300i, SSDSC2CT240A3/300i
- "INTEL SSDSC2CT(060|120|180|240)A3",
+ { "Intel 330/335 Series SSDs", // tested with INTEL SSDSC2CT180A3/300i, SSDSC2CT240A3/300i,
+ // INTEL SSDSC2CT240A4/335t
+ "INTEL SSDSC2CT(060|120|180|240)A[34]", // A4 = 335 Series
"", "",
//"-v 5,raw16(raw16),Reallocated_Sector_Ct "
"-v 9,msec24hour32,Power_On_Hours_and_Msec "
"-v 212,raw48,Unknown_Attribute" // ] from September 2012
},
{ "Transcend CompactFlash Cards", // tested with TRANSCEND/20080820,
- // TS4GCF133/20100709, TS16GCF133/20100709
- "TRANSCEND|TS(4|8|16)GCF133",
+ // TS4GCF133/20100709, TS16GCF133/20100709, TS16GCF150/20110407
+ "TRANSCEND|TS(4|8|16)GCF(133|150)",
"", "",
"-v 7,raw48,Unknown_Attribute "
"-v 8,raw48,Unknown_Attribute"
"HGST HT[ES]5450(25|32|50)A7E38[01]",
"", "", ""
},
- { "Hitachi/HGST Travelstar 5K750", // tested with Hitachi HTS547575A9E384/JE4OA60A
- "Hitachi HT[ES]5475(50|64|75)A9E38[14]",
+ { "Hitachi/HGST Travelstar 5K750", // tested with Hitachi HTS547575A9E384/JE4OA60A,
+ // APPLE HDD HTS547550A9E384/JE3AD70F
+ "(Hitachi|APPLE HDD) HT[ES]5475(50|64|75)A9E38[14]",
"", "", ""
},
{ "Hitachi Travelstar 7K60",
"(Hitachi )?HT[ES]7250(12|16|25|32|50)A9A36[2-5]",
"", "", ""
},
+ { "Hitachi/HGST Travelstar Z7K500", // tested with HITACHI HTS725050A7E630/GH2ZB390,
+ // HGST HTS725050A7E630/GH2OA420
+ "(HITACHI|HGST) HT[ES]7250(25|32|50)A7E63[015]",
+ "", "", ""
+ },
+ { "Hitachi/HGST Travelstar 7K750", // tested with Hitachi HTS727550A9E364/JF3OA0E0,
+ // Hitachi HTS727575A9E364/JF4OA0D0
+ "(Hitachi|HGST) HT[ES]7275(50|64|75)A9E36[14]",
+ "", "", ""
+ },
{ "HGST Travelstar 7K1000", // tested with HGST HTS721010A9E630/JB0OA3B0
"HGST HTS721010A9E630",
"", "", ""
"(IBM-)?IC35L(030|060|090|120|180)AVV207-[01]",
"", "", ""
},
- { "Hitachi Deskstar 5K3000", // tested with HDS5C3030ALA630/MEAOA5C0
- "(Hitachi )?HDS5C30(15|20|30)ALA63[02].*",
+ { "Hitachi Deskstar 5K3000", // tested with HDS5C3030ALA630/MEAOA5C0,
+ // Hitachi HDS5C3020BLE630/MZ4OAAB0 (OEM, Toshiba Canvio Desktop)
+ "(Hitachi )?HDS5C30(15|20|30)(ALA|BLE)63[02].*",
"", "", ""
},
{ "Hitachi Deskstar 5K4000", // tested with HDS5C4040ALE630/MPAOA250
"TOSHIBA MK(12|16)37GSX",
"", "", ""
},
+ { "Toshiba 2.5\" HDD MK..46GSX", // tested with TOSHIBA MK1246GSX/LB213M
+ "TOSHIBA MK(80|12|16|25)46GSX",
+ "", "", ""
+ },
{ "Toshiba 2.5\" HDD MK..50GACY", // tested with TOSHIBA MK8050GACY/TF105A
"TOSHIBA MK8050GACY",
"", "", ""
"TOSHIBA MK(75|10)59GSM",
"", "", ""
},
- { "Toshiba 2.5\" HDD MK..61GSYN", // tested with TOSHIBA MK5061GSYN/MH000A
- "TOSHIBA MK(16|25|32|50|64)61GSYN",
+ { "Toshiba 2.5\" HDD MK..61GSY[N]", // tested with TOSHIBA MK5061GSY/MC102E, MK5061GSYN/MH000A
+ "TOSHIBA MK(16|25|32|50|64)61GSYN?",
"", "", ""
},
- { "Toshiba 2.5\" HDD MK..65GSX", // tested with TOSHIBA MK5065GSX/GJ003A, MK3265GSXN/GH012H
- "TOSHIBA MK(16|25|32|50|64)65GSXN?",
+ { "Toshiba 2.5\" HDD MK..65GSX", // tested with TOSHIBA MK5065GSX/GJ003A, MK3265GSXN/GH012H,
+ // MK5065GSXF/GP006B
+ "TOSHIBA MK(16|25|32|50|64)65GSX[FN]?",
"", "", ""
},
{ "Toshiba 2.5\" HDD MK..76GSX", // tested with TOSHIBA MK3276GSX/GS002D
"TOSHIBA MK(10|20)02TSKB",
"", "", ""
},
+ { "Toshiba 3.5\" HDD DT01ACA...", // tested with TOSHIBA DT01ACA100/MS2OA750,
+ // TOSHIBA DT01ACA200/MX4OABB0, TOSHIBA DT01ACA300/MX6OABB0
+ "TOSHIBA DT01ACA(025|032|050|075|100|150|200|300)",
+ "", "", ""
+ },
{ "Toshiba 1.8\" HDD",
"TOSHIBA MK[23468]00[4-9]GA[HL]",
"", "", ""
"ST(160|250|320)LT0(07|09|11|14)-.*",
"", "", ""
},
+ { "Seagate Laptop SSHD", // tested with ST500LM000-1EJ162/SM11
+ "ST(500|1000)LM0(00|14)-.*",
+ "", "", ""
+ },
{ "Seagate Medalist 1010, 1720, 1721, 2120, 3230 and 4340", // ATA2, with -t permissive
"ST3(1010|1720|1721|2120|3230|4340)A",
"", "", ""
"ST(5|10|20)00NM0011",
"", "", ""
},
- { "Seagate Constellation ES.2 (SATA 6Gb/s)", // tested with ST33000650NS
- "ST3300065[012]NS",
+ { "Seagate Constellation ES.2 (SATA 6Gb/s)", // tested with ST32000645NS/0004, ST33000650NS
+ "ST3(2000645|300065[012])NS",
+ "", "", ""
+ },
+ { "Seagate Constellation ES.3", // tested with ST1000NM0033-9ZM173/0001, ST4000NM0033-9ZM170/SN03
+ "ST[1234]000NM00[35]3-.*",
"", "", ""
},
{ "Seagate Pipeline HD 5900.1",
"WDC WD((8|12|16|25|32)00AABS|(8|12|16|25|32|40|50)00AAJS)-.*",
"", "", ""
},
- { "Western Digital Caviar Blue Serial ATA", // WD Caviar SE16 Serial ATA
- "WDC WD((16|20|25|32|40|50|64|75)00AAKS|10EALS)-.*",
+ { "Western Digital Caviar Blue (SATA)", // WD Caviar SE16 Serial ATA
+ // tested with WD1602ABKS-18N8A0/DELL/02.03B04
+ "WDC WD((16|20|25|32|40|50|64|75)00AAKS|1602ABKS|10EALS)-.*",
"", "", ""
},
- { "Western Digital Caviar Blue Serial ATA", // SATA 3.0 variants
- "WDC WD((25|32|50)00AAKX|7500AALX|10EALX)-.*",
+ { "Western Digital Caviar Blue (SATA 6Gb/s)", // tested with WDC WD10EZEX-00RKKA0/80.00A80
+ "WDC WD((25|32|50)00AAKX|7500AALX|10EALX|10EZEX)-.*",
"", "", ""
},
{ "Western Digital RE Serial ATA",
"",
"-d sat"
},
+ { "USB: Toshiba Canvio 3.0 Portable Hard Drive; ", // 1TB
+ "0x0480:0xa007",
+ "", // 0x0001
+ "",
+ "-d sat"
+ },
+ { "USB: Toshiba Canvio Desktop; ", // 2TB
+ "0x0480:0xd010",
+ "",
+ "",
+ "-d sat"
+ },
// Cypress
{ "USB: ; Cypress CY7C68300A (AT2)",
"0x04b4:0x6830",
"",
"-d sat"
},
+ // Fujitsu chip on DeLock 42475
+ { "USB: Fujitsu SATA-to-USB3.0 bridge chip", // USB 3.0
+ "0x04c5:0x201d",
+ "", // 0x0001
+ "",
+ "-d sat"
+ },
// Myson Century
{ "USB: ; Myson Century CS8818",
"0x04cf:0x8818",
"",
"-d sat"
},
- { "USB: Seagate Expansion External; ", // 2TB
- "0x0bc2:0x33(00|32)",
+ { "USB: Seagate FreeAgent Desk; ", // 1TB
+ "0x0bc2:0x3008",
+ "",
+ "",
+ "-d sat,12"
+ },
+ { "USB: Seagate Expansion External; ", // 2TB, 3TB
+ "0x0bc2:0x33(00|20|32)",
"",
"",
"-d sat"
"",
"-d sat"
},
- { "USB: Seagate Backup Plus Desktop USB 3.0; ", // 3TB, 8 LBA/1 PBA offset
- "0x0bc2:0xa0a4",
+ { "USB: Seagate Backup Plus Desktop USB 3.0; ", // 4TB, 3TB (8 LBA/1 PBA offset)
+ "0x0bc2:0xa0a[14]",
"",
"",
"-d sat"
"-d sat"
},
{ "USB: WD Elements; ",
- "0x1058:0x1010",
+ "0x1058:0x10(10|a2)",
"", // 0x0105
"",
"-d sat"
"",
"" // unsupported
},
+ // 0x6795 (?)
+ { "USB: Sharkoon 2-Bay RAID Box; ", // USB 3.0
+ "0x6795:0x2756",
+ "", // 0x0100
+ "",
+ "-d sat"
+ },
/*
}; // builtin_knowndrives[]
*/
#define PATHINQ_SETTINGS_SIZE 128
#endif
-const char *os_XXXX_c_cvsid="$Id: os_freebsd.cpp 3771 2013-02-10 15:36:55Z samm2 $" \
+const char *os_XXXX_c_cvsid="$Id: os_freebsd.cpp 3824 2013-07-05 10:40:38Z samm2 $" \
ATACMDS_H_CVSID CCISS_H_CVSID CONFIG_H_CVSID INT64_H_CVSID OS_FREEBSD_H_CVSID SCSICMDS_H_CVSID UTILITY_H_CVSID;
#define NO_RETURN 0
for (i = 0; i < (int)scsinames.size(); i++) {
if(strcmp(scsinames[i].c_str(), test_name)==0)
{ // our disk device is CAM
+ if(strncmp(scsinames[i].c_str(), "/dev/pmp", strlen("/dev/pmp")) == 0) {
+ pout("Skipping port multiplier [%s]\n", scsinames[i].c_str());
+ set_err(EINVAL);
+ return 0;
+ }
if ((cam_dev = cam_open_device(test_name, O_RDWR)) == NULL) {
// open failure
set_err(errno);
set_err(EINVAL, "Option '-d hpt,L/M/N' invalid controller id L supplied");
return 0;
}
- if (!(1 <= channel && channel <= 16)) {
+ if (!(1 <= channel && channel <= 128)) {
set_err(EINVAL, "Option '-d hpt,L/M/N' invalid channel number M supplied");
return 0;
}
#define ARGUSED(x) ((void)(x))
-const char * os_linux_cpp_cvsid = "$Id: os_linux.cpp 3738 2012-12-17 12:01:35Z samm2 $"
+const char * os_linux_cpp_cvsid = "$Id: os_linux.cpp 3824 2013-07-05 10:40:38Z samm2 $"
OS_LINUX_H_CVSID;
extern unsigned char failuretest_permissive;
set_err(EINVAL, "Option '-d hpt,L/M/N' invalid controller id L supplied");
return 0;
}
- if (!(1 <= channel && channel <= 16)) {
+ if (!(1 <= channel && channel <= 128)) {
set_err(EINVAL, "Option '-d hpt,L/M/N' invalid channel number M supplied");
return 0;
}
#define SELECT_WIN_32_64(x32, x64) (x64)
#endif
-const char * os_win32_cpp_cvsid = "$Id: os_win32.cpp 3804 2013-03-27 20:39:41Z chrfranke $";
+const char * os_win32_cpp_cvsid = "$Id: os_win32.cpp 3830 2013-07-18 20:59:53Z chrfranke $";
/////////////////////////////////////////////////////////////////////////////
// Windows I/O-controls, some declarations are missing in the include files
return vstr;
}
- if (vi.dwPlatformId > 0xff || vi.dwMajorVersion > 0xff || vi.dwMinorVersion > 0xff)
- return vstr;
-
- const char * w;
- switch (vi.dwPlatformId << 16 | vi.dwMajorVersion << 8 | vi.dwMinorVersion) {
- case VER_PLATFORM_WIN32_WINDOWS<<16|0x0400| 0:
- w = (vi.szCSDVersion[1] == 'B' ||
- vi.szCSDVersion[1] == 'C' ? "95-osr2" : "95"); break;
- case VER_PLATFORM_WIN32_WINDOWS<<16|0x0400|10:
- w = (vi.szCSDVersion[1] == 'A' ? "98se" : "98"); break;
- case VER_PLATFORM_WIN32_WINDOWS<<16|0x0400|90: w = "me"; break;
- //case VER_PLATFORM_WIN32_NT <<16|0x0300|51: w = "nt3.51"; break;
- case VER_PLATFORM_WIN32_NT <<16|0x0400| 0: w = "nt4"; break;
- case VER_PLATFORM_WIN32_NT <<16|0x0500| 0: w = "2000"; break;
- case VER_PLATFORM_WIN32_NT <<16|0x0500| 1:
- w = (!GetSystemMetrics(87/*SM_MEDIACENTER*/) ? "xp"
- : "xp-mc"); break;
- case VER_PLATFORM_WIN32_NT <<16|0x0500| 2:
- w = (!GetSystemMetrics(89/*SM_SERVERR2*/) ? "2003"
- : "2003r2"); break;
- case VER_PLATFORM_WIN32_NT <<16|0x0600| 0:
- w = (vi.wProductType == VER_NT_WORKSTATION ? "vista"
- : "2008" ); break;
- case VER_PLATFORM_WIN32_NT <<16|0x0600| 1:
- w = (vi.wProductType == VER_NT_WORKSTATION ? "win7"
- : "2008r2"); break;
- case VER_PLATFORM_WIN32_NT <<16|0x0600| 2:
- w = (vi.wProductType == VER_NT_WORKSTATION ? "win8"
- : "2012"); break;
- default: w = 0; break;
+ const char * w = 0;
+ if (vi.dwPlatformId == VER_PLATFORM_WIN32_NT) {
+
+ if (vi.dwMajorVersion > 6 || (vi.dwMajorVersion == 6 && vi.dwMinorVersion >= 2)) {
+ // Starting with Windows 8.1 Preview, GetVersionEx() does no longer report the
+ // actual OS version, see:
+ // http://msdn.microsoft.com/en-us/library/windows/desktop/dn302074.aspx
+
+ ULONGLONG major_equal = VerSetConditionMask(0, VER_MAJORVERSION, VER_EQUAL);
+ for (unsigned major = vi.dwMajorVersion; major <= 9; major++) {
+ OSVERSIONINFOEXA vi2; memset(&vi2, 0, sizeof(vi2));
+ vi2.dwOSVersionInfoSize = sizeof(vi2); vi2.dwMajorVersion = major;
+ if (!VerifyVersionInfo(&vi2, VER_MAJORVERSION, major_equal))
+ continue;
+ if (vi.dwMajorVersion < major) {
+ vi.dwMajorVersion = major; vi.dwMinorVersion = 0;
+ }
+
+ ULONGLONG minor_equal = VerSetConditionMask(0, VER_MINORVERSION, VER_EQUAL);
+ for (unsigned minor = vi.dwMinorVersion; minor <= 9; minor++) {
+ memset(&vi2, 0, sizeof(vi2)); vi2.dwOSVersionInfoSize = sizeof(vi2);
+ vi2.dwMinorVersion = minor;
+ if (!VerifyVersionInfo(&vi2, VER_MINORVERSION, minor_equal))
+ continue;
+ vi.dwMinorVersion = minor;
+ break;
+ }
+
+ break;
+ }
+ }
+
+ if (vi.dwMajorVersion <= 0xf && vi.dwMinorVersion <= 0xf) {
+ bool ws = (vi.wProductType <= VER_NT_WORKSTATION);
+ switch (vi.dwMajorVersion << 4 | vi.dwMinorVersion) {
+ case 0x50: w = "2000"; break;
+ case 0x51: w = "xp"; break;
+ case 0x52: w = (!GetSystemMetrics(89/*SM_SERVERR2*/)
+ ? "2003" : "2003r2"); break;
+ case 0x60: w = (ws ? "vista" : "2008" ); break;
+ case 0x61: w = (ws ? "win7" : "2008r2"); break;
+ case 0x62: w = (ws ? "win8" : "2012" ); break;
+ case 0x63: w = (ws ? "win8.1": "2012r2"); break;
+ }
+ }
}
const char * w64 = "";
if (!w)
snprintf(vptr, vlen, "-%s%u.%u%s",
- (vi.dwPlatformId==VER_PLATFORM_WIN32_NT ? "nt" : "9x"),
+ (vi.dwPlatformId==VER_PLATFORM_WIN32_NT ? "nt" : "??"),
(unsigned)vi.dwMajorVersion, (unsigned)vi.dwMinorVersion, w64);
else if (vi.wServicePackMinor)
snprintf(vptr, vlen, "-%s%s-sp%u.%u", w, w64, vi.wServicePackMajor, vi.wServicePackMinor);
#include "daemon_win32.h"
-const char * daemon_win32_cpp_cvsid = "$Id: daemon_win32.cpp 3760 2013-01-30 18:43:39Z chrfranke $"
+const char * daemon_win32_cpp_cvsid = "$Id: daemon_win32.cpp 3834 2013-07-20 16:17:13Z chrfranke $"
DAEMON_WIN32_H_CVSID;
#include <stdio.h>
if (!(hs = CreateService(hm,
svc_opts->svcname, svc_opts->dispname,
SERVICE_ALL_ACCESS,
- SERVICE_WIN32_OWN_PROCESS|SERVICE_INTERACTIVE_PROCESS,
+ SERVICE_WIN32_OWN_PROCESS,
SERVICE_AUTO_START, SERVICE_ERROR_NORMAL, path,
NULL/*no load ordering*/, NULL/*no tag id*/,
""/*no depedencies*/, NULL/*local system account*/, NULL/*no pw*/))) {
:: You should have received a copy of the GNU General Public License
:: (for example COPYING); If not, see <http://www.gnu.org/licenses/>.
::
-:: $Id: smartd_warning.cmd 3810 2013-04-18 20:08:39Z chrfranke $
+:: $Id: smartd_warning.cmd 3816 2013-06-09 16:16:11Z chrfranke $
::
set err=
set SMARTD_SUBJECT=SMART error (%SMARTD_FAILTYPE%) detected on host: %COMPUTERNAME%
:: Temp file for message
-if not "%TMP%" == "" set SMARTD_FULLMSGFILE=%TMP%\smartd_warning-%DATE%-%RANDOM%.txt
-if "%TMP%" == "" set SMARTD_FULLMSGFILE=smartd_warning-%DATE%-%RANDOM%.txt
+if not "%TMP%" == "" set SMARTD_FULLMSGFILE=%TMP%\smartd_warning-%RANDOM%.txt
+if "%TMP%" == "" set SMARTD_FULLMSGFILE=smartd_warning-%RANDOM%.txt
:: Format message
(
;
; Home page of code is: http://smartmontools.sourceforge.net
;
-; Copyright (C) 2011 Christian Franke <smartmontools-support@lists.sourceforge.net>
+; Copyright (C) 2011-13 Christian Franke <smartmontools-support@lists.sourceforge.net>
;
; This program is free software; you can redistribute it and/or modify
; it under the terms of the GNU General Public License as published by
; You should have received a copy of the GNU General Public License
; (for example COPYING); If not, see <http://www.gnu.org/licenses/>.
;
-; $Id: update-smart-drivedb.nsi 3392 2011-06-29 19:13:22Z chrfranke $
+; $Id: update-smart-drivedb.nsi 3815 2013-06-06 17:31:59Z chrfranke $
;
Pop $R0
DetailPrint "Download from $R0"
- ; Trac repository browser (does not return HTTP 404 errors)
- StrCpy $R1 "http://sourceforge.net/apps/trac/smartmontools/export/HEAD/$R0/smartmontools/drivedb.h"
- ; ViewVC repository browser (does not return ContentLength required for NSISdl::download)
- ;StrCpy $R1 "http://smartmontools.svn.sourceforge.net/viewvc/smartmontools/$R0/smartmontools/drivedb.h?revision=HEAD"
+ ; SVN repository read-only URL
+ ; (SF code browser does not return ContentLength required for NSISdl::download)
+ StrCpy $R1 "http://svn.code.sf.net/p/smartmontools/code/$R0/smartmontools/drivedb.h"
+
DetailPrint "($R1)"
NSISdl::download $R1 "drivedb.h.new"
#include <stdio.h>
#include <string.h>
#include <errno.h>
+#include <ctype.h>
#include "config.h"
#include "int64.h"
#include "dev_interface.h"
#include "utility.h"
-const char *scsicmds_c_cvsid="$Id: scsicmds.cpp 3807 2013-04-18 17:11:12Z chrfranke $"
+const char *scsicmds_c_cvsid="$Id: scsicmds.cpp 3820 2013-06-17 08:45:10Z samm2 $"
SCSICMDS_H_CVSID;
// Print SCSI debug messages?
Copyright (C) 2002-10 Bruce Allen <smartmontools-support@lists.sourceforge.net>
Copyright (C) 2004-13 Christian Franke <smartmontools-support@lists.sourceforge.net>
-$Id: smartctl.8.in 3799 2013-03-15 17:47:25Z chrfranke $
+$Id: smartctl.8.in 3832 2013-07-20 14:49:31Z chrfranke $
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
connected to a HighPoint RocketRAID controller. The integer L is the
controller id, the integer M is the channel number, and the integer N
is the PMPort number if it is available. The allowed values of L are
-from 1 to 4 inclusive, M are from 1 to 16 inclusive and N from 1 to 4
+from 1 to 4 inclusive, M are from 1 to 128 inclusive and N from 1 to 4
if PMPort available. And also these values are limited by the model
of the HighPoint RocketRAID controller.
Use syntax such as:
Gets/sets the \'Write Cache Enable\' (WCE) bit (if supported).
The write cache is usually enabled by default.
+.I wcreorder[,on|off]
+\- [ATA only] [NEW EXPERIMENTAL SMARTCTL FEATURE]
+Gets/sets Write Cache Reordering.
+If it is disabled (off), disk write scheduling is executed on a
+first-in-first-out (FIFO) basis. If Write Cache Reordering is enabled (on),
+then disk write scheduling may be reordered by the drive. If write cache is
+disabled, the current Write Cache Reordering state is remembered but has
+no effect on non-cached writes, which are always written in the order received.
+The state of Write Cache Reordering has no effect on either NCQ or LCQ queued
+commands.
+
.I rcache[,on|off]
\- [SCSI only] [NEW EXPERIMENTAL SMARTCTL FEATURE]
Gets/sets the \'Read Cache Disable\' (RCE) bit. \'Off\' value disables read cache
.SH
SVN ID OF THIS PAGE:
-$Id: smartctl.8.in 3799 2013-03-15 17:47:25Z chrfranke $
+$Id: smartctl.8.in 3832 2013-07-20 14:49:31Z chrfranke $
#include "smartctl.h"
#include "utility.h"
-const char * smartctl_cpp_cvsid = "$Id: smartctl.cpp 3726 2012-12-12 20:02:48Z chrfranke $"
+const char * smartctl_cpp_cvsid = "$Id: smartctl.cpp 3826 2013-07-06 21:57:29Z samm2 $"
CONFIG_H_CVSID SMARTCTL_H_CVSID;
// Globals to control printing
" --identify[=[w][nvb]]\n"
" Show words and bits from IDENTIFY DEVICE data (ATA)\n\n"
" -g NAME, --get=NAME\n"
-" Get device setting: all, aam, apm, lookahead, security, wcache, rcache\n\n"
+" Get device setting: all, aam, apm, lookahead, security, wcache, rcache, wcreorder\n\n"
" -a, --all\n"
" Show all SMART information for device\n\n"
" -x, --xall\n"
" -s NAME[,VALUE], --set=NAME[,VALUE]\n"
" Enable/disable/change device setting: aam,[N|off], apm,[N|off],\n"
" lookahead,[on|off], security-freeze, standby,[N|off|now],\n"
-" wcache,[on|off], rcache,[on|off]\n\n"
+" wcache,[on|off], rcache,[on|off], wcreorder,[on|off]\n\n"
);
printf(
"======================================= READ AND DISPLAY DATA OPTIONS =====\n\n"
case 'f':
return "old, brief, hex[,id|val]";
case 'g':
- return "aam, apm, lookahead, security, wcache, rcache";
+ return "aam, apm, lookahead, security, wcache, rcache, wcreorder";
case opt_set:
return "aam,[N|off], apm,[N|off], lookahead,[on|off], security-freeze, "
- "standby,[N|off|now], wcache,[on|off], rcache,[on|off]";
+ "standby,[N|off|now], wcache,[on|off], rcache,[on|off], wcreorder,[on|off]";
case 's':
return getvalidarglist(opt_smart)+", "+getvalidarglist(opt_set);
case opt_identify:
ataopts.smart_logdir = ataopts.gp_logdir = true;
ataopts.sct_temp_sts = ataopts.sct_temp_hist = true;
ataopts.sct_erc_get = true;
+ ataopts.sct_wcache_reorder_get = true;
ataopts.devstat_all_pages = true;
ataopts.sataphy = true;
ataopts.get_set_used = true;
else
badarg = true;
}
+ else if (!strcmp(name, "wcreorder")) {
+ if (get) {
+ ataopts.sct_wcache_reorder_get = true;
+ }
+ else if (off)
+ ataopts.sct_wcache_reorder_set = -1;
+ else if (on)
+ ataopts.sct_wcache_reorder_set = 1;
+ else
+ badarg = true;
+ }
else if (!strcmp(name, "rcache")) {
if (get)
scsiopts.get_rcd = true;
Copyright (C) 2002-10 Bruce Allen <smartmontools-support@lists.sourceforge.net>
Copyright (C) 2004-13 Christian Franke <smartmontools-support@lists.sourceforge.net>
-$Id: smartd.conf.5.in 3741 2013-01-02 17:06:54Z chrfranke $
+$Id: smartd.conf.5.in 3833 2013-07-20 15:00:04Z chrfranke $
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
connected to a HighPoint RocketRAID controller. The integer L is the
controller id, the integer M is the channel number, and the integer N
is the PMPort number if it is available. The allowed values of L are
-from 1 to 4 inclusive, M are from 1 to 16 inclusive and N from 1 to 4
+from 1 to 4 inclusive, M are from 1 to 128 inclusive and N from 1 to 4
if PMPort available. And also these values are limited by the model
of the HighPoint RocketRAID controller.
In log files and email messages this disk will be identified as
.SH
SVN ID OF THIS PAGE:
-$Id: smartd.conf.5.in 3741 2013-01-02 17:06:54Z chrfranke $
+$Id: smartd.conf.5.in 3833 2013-07-20 15:00:04Z chrfranke $
#
# smartmontools drive database update script
#
-# Copyright (C) 2010-11 Christian Franke <smartmontools-support@lists.sourceforge.net>
+# Copyright (C) 2010-13 Christian Franke <smartmontools-support@lists.sourceforge.net>
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# You should have received a copy of the GNU General Public License
# (for example COPYING); If not, see <http://www.gnu.org/licenses/>.
#
-# $Id: update-smart-drivedb.in 3294 2011-03-16 21:36:58Z chrfranke $
+# $Id: update-smart-drivedb.in 3814 2013-06-04 19:38:25Z chrfranke $
#
set -e
# Smartctl used for syntax check
SMARTCTL="$sbindir/smartctl"
-# Trac repository browser (does not return HTTP 404 errors)
-#SRCEXPR='http://sourceforge.net/apps/trac/smartmontools/export/HEAD/$location/smartmontools/drivedb.h'
-
-# ViewVC repository browser
-SRCEXPR='http://smartmontools.svn.sourceforge.net/viewvc/smartmontools/$location/smartmontools/drivedb.h?revision=HEAD'
-
+# Download URL for sourceforge code browser
+SRCEXPR='http://sourceforge.net/p/smartmontools/code/HEAD/tree/$location/smartmontools/drivedb.h?format=raw'
# Parse options
q="-q "
errmsg="download from $location failed (HTTP error)"
continue
fi
- if grep -i 'ViewVC Exception' "$DEST.new" >/dev/null; then
- errmsg="download from $location failed (ViewVC error)"
+ if grep -i '<title>.*Error has Occurred' "$DEST.new" >/dev/null; then
+ errmsg="download from $location failed (SF code browser error)"
continue
fi
exit 1
fi
-# Keep old file if identical, ignore differences in Id string
+# Keep old file if identical
rm -f "$DEST.lastcheck"
if [ -f "$DEST" ]; then
- if cat "$DEST" | sed 's|\$''Id''[^$]*\$|$''Id''$|' | cmp - "$DEST.new" >/dev/null; then
+ if cmp "$DEST" "$DEST.new" >/dev/null 2>/dev/null; then
rm -f "$DEST.new"
touch "$DEST.lastcheck"
echo "$DEST is already up to date"
#include "atacmds.h"
#include "dev_interface.h"
-const char * utility_cpp_cvsid = "$Id: utility.cpp 3739 2013-01-01 16:32:48Z chrfranke $"
+const char * utility_cpp_cvsid = "$Id: utility.cpp 3838 2013-07-21 16:32:27Z chrfranke $"
UTILITY_H_CVSID INT64_H_CVSID;
const char * packet_types[] = {
return;
}
+// Check regular expression for non-portable features.
+//
// POSIX extended regular expressions interpret unmatched ')' ordinary:
// "The close-parenthesis shall be considered special in this context
// only if matched with a preceding open-parenthesis."
//
-// Actual '(...)' nesting errors remain undetected on strict POSIX
-// implementations (glibc) but an error is reported on others (Cygwin).
-//
-// The check below is rather incomplete because it does not handle
-// e.g. '\)' '[)]'.
-// But it should work for the regex subset used in drive database
-// and smartd '-s' directives.
-static int check_regex_nesting(const char * pattern)
+// GNU libc and BSD libc support unmatched ')', Cygwin reports an error.
+//
+// POSIX extended regular expressions do not define empty subexpressions:
+// "A vertical-line appearing first or last in an ERE, or immediately following
+// a vertical-line or a left-parenthesis, or immediately preceding a
+// right-parenthesis, produces undefined results."
+//
+// GNU libc and Cygwin support empty subexpressions, BSD libc reports an error.
+//
+static const char * check_regex(const char * pattern)
{
- int level = 0, i;
- for (i = 0; pattern[i] && level >= 0; i++) {
- switch (pattern[i]) {
- case '(': level++; break;
- case ')': level--; break;
+ int level = 0;
+ char c;
+
+ for (int i = 0; (c = pattern[i]); i++) {
+ // Skip "\x"
+ if (c == '\\') {
+ if (!pattern[++i])
+ break;
+ continue;
}
+
+ // Skip "[...]"
+ if (c == '[') {
+ if (pattern[++i] == '^')
+ i++;
+ if (!pattern[i++])
+ break;
+ while ((c = pattern[i]) && c != ']')
+ i++;
+ if (!c)
+ break;
+ continue;
+ }
+
+ // Check "(...)" nesting
+ if (c == '(')
+ level++;
+ else if (c == ')' && --level < 0)
+ return "Unmatched ')'";
+
+ // Check for leading/trailing '|' or "||", "|)", "|$", "(|", "^|"
+ char c1;
+ if ( (c == '|' && ( i == 0 || !(c1 = pattern[i+1])
+ || c1 == '|' || c1 == ')' || c1 == '$'))
+ || ((c == '(' || c == '^') && pattern[i+1] == '|') )
+ return "Empty '|' subexpression";
}
- return level;
+
+ return (const char *)0;
}
// Wrapper class for regex(3)
return false;
}
- if (check_regex_nesting(m_pattern.c_str()) < 0) {
- m_errmsg = "Unmatched ')'";
+ const char * errmsg = check_regex(m_pattern.c_str());
+ if (errmsg) {
+ m_errmsg = errmsg;
free_buf();
return false;
}