From 8f283059f5a0b91667e932ec0d1953e549651aee Mon Sep 17 00:00:00 2001 From: Michal Hlavinka Date: Fri, 29 Jan 2010 08:35:19 +0000 Subject: [PATCH] - updated to 5.39.1 - Fix spin-up of SATA drive if '-n standby' is used. --- .cvsignore | 2 +- smartmontools-5.39-regrfix.patch | 286 ------------------------------- smartmontools.spec | 12 +- sources | 2 +- 4 files changed, 8 insertions(+), 294 deletions(-) delete mode 100644 smartmontools-5.39-regrfix.patch diff --git a/.cvsignore b/.cvsignore index 07e0c5c..484038a 100644 --- a/.cvsignore +++ b/.cvsignore @@ -1 +1 @@ -smartmontools-5.39.tar.gz +smartmontools-5.39.1.tar.gz diff --git a/smartmontools-5.39-regrfix.patch b/smartmontools-5.39-regrfix.patch deleted file mode 100644 index c9548d6..0000000 --- a/smartmontools-5.39-regrfix.patch +++ /dev/null @@ -1,286 +0,0 @@ -diff -Naurp ../smartmontools-5.39.regfix/atacmds.cpp ../smartmontools-5.39/atacmds.cpp ---- ../smartmontools-5.39.regfix/atacmds.cpp 2010-01-20 15:47:48.099341028 +0100 -+++ ../smartmontools-5.39/atacmds.cpp 2010-01-20 16:13:58.380345000 +0100 -@@ -2370,13 +2370,17 @@ int ataPrintSmartSelfTestlog(const ata_s - uint64_t lba48 = (log->lbafirstfailure < 0xffffffff ? log->lbafirstfailure : 0xffffffffffffULL); - - // Print entry -- bool errorfound = ataPrintSmartSelfTestEntry(testno, -- log->selftestnumber, log->selfteststatus, log->timestamp, -- lba48, !allentries, noheaderprinted); -- -- // keep track of time of most recent error -- if (errorfound && !hours) -- hours=log->timestamp; -+ if (ataPrintSmartSelfTestEntry(testno, -+ log->selftestnumber, log->selfteststatus, -+ log->timestamp, lba48, !allentries, noheaderprinted)) { -+ -+ // Self-test showed an error -+ retval++; -+ -+ // keep track of time of most recent error -+ if (!hours) -+ hours = log->timestamp; -+ } - } - } - if (!allentries && retval) -diff -Naurp ../smartmontools-5.39.regfix/ataprint.cpp ../smartmontools-5.39/ataprint.cpp ---- ../smartmontools-5.39.regfix/ataprint.cpp 2010-01-20 15:47:48.099341028 +0100 -+++ ../smartmontools-5.39/ataprint.cpp 2010-01-20 16:12:24.039465040 +0100 -@@ -3,8 +3,8 @@ - * - * Home page of code is: http://smartmontools.sourceforge.net - * -- * Copyright (C) 2002-9 Bruce Allen -- * Copyright (C) 2008-9 Christian Franke -+ * Copyright (C) 2002-10 Bruce Allen -+ * Copyright (C) 2008-10 Christian Franke - * Copyright (C) 1999-2000 Michael Cornwell - * - * This program is free software; you can redistribute it and/or modify -@@ -2066,7 +2066,6 @@ int ataPrintMain (ata_device * device, c - || options.smart_ext_selftest_log - || options.sataphy - || !options.log_requests.empty() ) { -- PRINT_ON(con); - if (isGeneralPurposeLoggingCapable(&drive)) - pout("General Purpose Logging (GPL) feature set supported\n"); - -@@ -2087,31 +2086,26 @@ int ataPrintMain (ata_device * device, c - // Read SMART Log directory - if (need_smart_logdir) { - if (ataReadLogDirectory(device, &smartlogdir_buf, false)){ -- PRINT_OFF(con); - pout("Read SMART Log Directory failed.\n\n"); - failuretest(OPTIONAL_CMD, returnval|=FAILSMART); - } - else - smartlogdir = &smartlogdir_buf; - } -- PRINT_ON(con); - - // Read GP Log directory - if (need_gp_logdir) { - if (ataReadLogDirectory(device, &gplogdir_buf, true)){ -- PRINT_OFF(con); - pout("Read GP Log Directory failed.\n\n"); - failuretest(OPTIONAL_CMD, returnval|=FAILSMART); - } - else - gplogdir = &gplogdir_buf; - } -- PRINT_ON(con); - - // Print log directories - if ((options.gp_logdir && gplogdir) || (options.smart_logdir && smartlogdir)) - PrintLogDirectories(gplogdir, smartlogdir); -- PRINT_OFF(con); - - // Print log pages - for (i = 0; i < options.log_requests.size(); i++) { -diff -Naurp ../smartmontools-5.39.regfix/CHANGELOG ../smartmontools-5.39/CHANGELOG ---- ../smartmontools-5.39.regfix/CHANGELOG 2010-01-20 15:47:48.100527305 +0100 -+++ ../smartmontools-5.39/CHANGELOG 2010-01-20 16:28:38.174340078 +0100 -@@ -45,6 +45,20 @@ NOTES FOR FUTURE RELEASES: see TODO file - - smartmontools 5.39 2009-12-09 - -+ [CF] Linux: Allow smartd 'DEVICESCAN -d sat' (ticket #13). -+ Detects (S)ATA devices behind a standard SAT layer -+ (Vendor ID: "ATA "), but not USB bridges with SAT support. -+ Only added for backward compatibility with 5.38. -+ No longer needed as 'DEVICESCAN' without '-d' includes these devices. -+ -+ [CF] smartd: Fix directive '-l selftest' (ticket #36) -+ Regression was introduced with r2773. -+ -+ [CF] smartctl: Don't print log directory if '-q errorsonly' is specified. -+ -+ [CF] smartctl: Fix option '-q, --quietmode' (ticket #11). -+ Regression was introduced with r2807. -+ - [CF] do_release: Commit CHANGELOG and NEWS also. Allow to review changes. - - [CF] Linux: Add workaround for Adaptec series 2, 5 and 5Z controllers -diff -Naurp ../smartmontools-5.39.regfix/NEWS ../smartmontools-5.39/NEWS ---- ../smartmontools-5.39.regfix/NEWS 2010-01-20 15:47:48.104527238 +0100 -+++ ../smartmontools-5.39/NEWS 2010-01-20 16:28:51.388652458 +0100 -@@ -8,6 +8,9 @@ http://smartmontools.svn.sourceforge.net - Date 2009-12-09 - Summary: smartmontools release 5.39 (UNSTABLE/EXPERIMENTAL) - ----------------------------------------------------------- -+- Fix regression in smartctl option '-q, --quietmode'. -+- Fix regression in smartd directive '-l selftest' -+- Linux: Allow smartd 'DEVICESCAN -d sat'. - - Sourcecode repository moved from CVS to SVN - - Support for USB devices with Cypress, JMicron and Sunplus USB bridges - - USB device type autodetection for some devices on Linux, Windows and FreeBSD -diff -Naurp ../smartmontools-5.39.regfix/os_linux.cpp ../smartmontools-5.39/os_linux.cpp ---- ../smartmontools-5.39.regfix/os_linux.cpp 2010-01-20 15:47:48.106527477 +0100 -+++ ../smartmontools-5.39/os_linux.cpp 2010-01-20 16:28:19.456339800 +0100 -@@ -831,17 +831,22 @@ class linux_scsi_device - public /*extends*/ linux_smart_device - { - public: -- linux_scsi_device(smart_interface * intf, const char * dev_name, const char * req_type); -+ linux_scsi_device(smart_interface * intf, const char * dev_name, -+ const char * req_type, bool scanning = false); - - virtual smart_device * autodetect_open(); - - virtual bool scsi_pass_through(scsi_cmnd_io * iop); -+ -+private: -+ bool m_scanning; ///< true if created within scan_smart_devices - }; - - linux_scsi_device::linux_scsi_device(smart_interface * intf, -- const char * dev_name, const char * req_type) -+ const char * dev_name, const char * req_type, bool scanning /*= false*/) - : smart_device(intf, dev_name, "scsi", req_type), -- linux_smart_device(O_RDWR | O_NONBLOCK, O_RDONLY | O_NONBLOCK) -+ linux_smart_device(O_RDWR | O_NONBLOCK, O_RDONLY | O_NONBLOCK), -+ m_scanning(scanning) - { - } - -@@ -2646,8 +2651,13 @@ smart_device * linux_scsi_device::autode - return this; - - // No Autodetection if device type was specified by user -- if (*get_req_type()) -- return this; -+ bool sat_only = false; -+ if (*get_req_type()) { -+ // Detect SAT if device object was created by scan_smart_devices(). -+ if (!(m_scanning && !strcmp(get_req_type(), "sat"))) -+ return this; -+ sat_only = true; -+ } - - // The code below is based on smartd.cpp:SCSIFilterKnown() - -@@ -2668,36 +2678,43 @@ smart_device * linux_scsi_device::autode - - int avail_len = req_buff[4] + 5; - int len = (avail_len < req_len ? avail_len : req_len); -- if (len < 36) -+ if (len < 36) { -+ if (sat_only) { -+ close(); -+ set_err(EIO, "INQUIRY too short for SAT"); -+ } - return this; -+ } - - // Use INQUIRY to detect type -+ if (!sat_only) { - -- // 3ware ? -- if (!memcmp(req_buff + 8, "3ware", 5) || !memcmp(req_buff + 8, "AMCC", 4)) { -- close(); -- set_err(EINVAL, "AMCC/3ware controller, please try adding '-d 3ware,N',\n" -- "you may need to replace %s with /dev/twaN or /dev/tweN", get_dev_name()); -- return this; -- } -+ // 3ware ? -+ if (!memcmp(req_buff + 8, "3ware", 5) || !memcmp(req_buff + 8, "AMCC", 4)) { -+ close(); -+ set_err(EINVAL, "AMCC/3ware controller, please try adding '-d 3ware,N',\n" -+ "you may need to replace %s with /dev/twaN or /dev/tweN", get_dev_name()); -+ return this; -+ } - -- // DELL? -- if (!memcmp(req_buff + 8, "DELL PERC", 12) || !memcmp(req_buff + 8, "MegaRAID", 8)) { -- close(); -- set_err(EINVAL, "DELL or MegaRaid controller, please try adding '-d megaraid,N'"); -- return this; -- } -+ // DELL? -+ if (!memcmp(req_buff + 8, "DELL PERC", 12) || !memcmp(req_buff + 8, "MegaRAID", 8)) { -+ close(); -+ set_err(EINVAL, "DELL or MegaRaid controller, please try adding '-d megaraid,N'"); -+ return this; -+ } - -- // Marvell ? -- if (len >= 42 && !memcmp(req_buff + 36, "MVSATA", 6)) { -- //pout("Device %s: using '-d marvell' for ATA disk with Marvell driver\n", get_dev_name()); -- close(); -- smart_device_auto_ptr newdev( -- new linux_marvell_device(smi(), get_dev_name(), get_req_type()) -- ); -- newdev->open(); // TODO: Can possibly pass open fd -- delete this; -- return newdev.release(); -+ // Marvell ? -+ if (len >= 42 && !memcmp(req_buff + 36, "MVSATA", 6)) { -+ //pout("Device %s: using '-d marvell' for ATA disk with Marvell driver\n", get_dev_name()); -+ close(); -+ smart_device_auto_ptr newdev( -+ new linux_marvell_device(smi(), get_dev_name(), get_req_type()) -+ ); -+ newdev->open(); // TODO: Can possibly pass open fd -+ delete this; -+ return newdev.release(); -+ } - } - - // SAT or USB ? -@@ -2709,6 +2726,11 @@ smart_device * linux_scsi_device::autode - } - - // Nothing special found -+ -+ if (sat_only) { -+ close(); -+ set_err(EIO, "Not a SAT device"); -+ } - return this; - } - -@@ -2891,7 +2913,7 @@ bool linux_smart_interface::get_dev_list - if (autodetect) - dev = autodetect_smart_device(name); - else if (is_scsi) -- dev = new linux_scsi_device(this, name, req_type); -+ dev = new linux_scsi_device(this, name, req_type, true /*scanning*/); - else - dev = new linux_ata_device(this, name, req_type); - if (dev) // autodetect_smart_device() may return nullptr. -@@ -2917,7 +2939,8 @@ bool linux_smart_interface::scan_smart_d - type = ""; - - bool scan_ata = (!*type || !strcmp(type, "ata" )); -- bool scan_scsi = (!*type || !strcmp(type, "scsi")); -+ // "sat" detection will be later handled in linux_scsi_device::autodetect_open() -+ bool scan_scsi = (!*type || !strcmp(type, "scsi") || !strcmp(type, "sat")); - if (!(scan_ata || scan_scsi)) - return true; - -diff -Naurp ../smartmontools-5.39.regfix/smartctl.cpp ../smartmontools-5.39/smartctl.cpp ---- ../smartmontools-5.39.regfix/smartctl.cpp 2010-01-20 15:47:48.215402112 +0100 -+++ ../smartmontools-5.39/smartctl.cpp 2010-01-20 16:12:24.039465040 +0100 -@@ -3,8 +3,8 @@ - * - * Home page of code is: http://smartmontools.sourceforge.net - * -- * Copyright (C) 2002-9 Bruce Allen -- * Copyright (C) 2008-9 Christian Franke -+ * Copyright (C) 2002-10 Bruce Allen -+ * Copyright (C) 2008-10 Christian Franke - * Copyright (C) 2000 Michael Cornwell - * - * This program is free software; you can redistribute it and/or modify -@@ -730,7 +730,7 @@ const char * parse_options(int argc, cha - // print output is switchable, then start with the print output - // turned off - if (con->printing_switchable) -- con->dont_print = false; -+ con->dont_print = true; - - // error message if user has asked for more than one test - if (testcnt > 1) { diff --git a/smartmontools.spec b/smartmontools.spec index 1d708d9..6a65f2a 100644 --- a/smartmontools.spec +++ b/smartmontools.spec @@ -1,7 +1,7 @@ Summary: Tools for monitoring SMART capable hard disks Name: smartmontools -Version: 5.39 -Release: 2%{?dist} +Version: 5.39.1 +Release: 1%{?dist} Epoch: 1 Group: System Environment/Base License: GPLv2+ @@ -16,9 +16,6 @@ Patch1: smartmontools-5.38-defaultconf.patch #libcap-ng new feature, testing for now Patch2: smartmontools-5.38-lowcap.patch -#fix some post-5.39 regressions, taken from upstream, for sm <= 5.39 -Patch3: smartmontools-5.39-regrfix.patch - BuildRoot: %(mktemp -ud %{_tmppath}/%{name}-%{version}-%{release}-XXXXXX) Requires: fileutils mailx chkconfig initscripts BuildRequires: readline-devel ncurses-devel automake util-linux groff gettext @@ -36,7 +33,6 @@ failure. %setup -q %patch1 -p1 -b .defaultconf %patch2 -p1 -b .lowcap -%patch3 -p2 -b .regrfix # fix encoding for fe in AUTHORS CHANGELOG @@ -90,6 +86,10 @@ fi %config(noreplace) %{_sysconfdir}/sysconfig/smartmontools %changelog +* Fri Jan 29 2010 Michal Hlavinka - 1:5.39.1-1 +- updated to 5.39.1 +- Fix spin-up of SATA drive if '-n standby' is used. + * Wed Jan 20 2010 Michal Hlavinka - 1:5.39-2 - fix DEVICESCAN -d sat - fix directive '-l selftest' diff --git a/sources b/sources index c92597a..41030da 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -63c1b5373a9ef91e9c9becb16e147571 smartmontools-5.39.tar.gz +f6f7380ae45587161c0adae8862110e9 smartmontools-5.39.1.tar.gz