From nobody@FreeBSD.org  Tue Jan 21 09:29:33 2014
Return-Path: <nobody@FreeBSD.org>
Received: from mx1.freebsd.org (mx1.freebsd.org [8.8.178.115])
	(using TLSv1 with cipher ADH-AES256-SHA (256/256 bits))
	(No client certificate requested)
	by hub.freebsd.org (Postfix) with ESMTPS id DAEF82AA
	for <freebsd-gnats-submit@FreeBSD.org>; Tue, 21 Jan 2014 09:29:33 +0000 (UTC)
Received: from oldred.freebsd.org (oldred.freebsd.org [IPv6:2001:1900:2254:206a::50:4])
	(using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits))
	(No client certificate requested)
	by mx1.freebsd.org (Postfix) with ESMTPS id C52351781
	for <freebsd-gnats-submit@FreeBSD.org>; Tue, 21 Jan 2014 09:29:33 +0000 (UTC)
Received: from oldred.freebsd.org ([127.0.1.6])
	by oldred.freebsd.org (8.14.5/8.14.7) with ESMTP id s0L9TWa9034524
	for <freebsd-gnats-submit@FreeBSD.org>; Tue, 21 Jan 2014 09:29:32 GMT
	(envelope-from nobody@oldred.freebsd.org)
Received: (from nobody@localhost)
	by oldred.freebsd.org (8.14.5/8.14.5/Submit) id s0L9TW9j034499;
	Tue, 21 Jan 2014 09:29:32 GMT
	(envelope-from nobody)
Message-Id: <201401210929.s0L9TW9j034499@oldred.freebsd.org>
Date: Tue, 21 Jan 2014 09:29:32 GMT
From: Volodymyr Kostyrko <arcade@b1t.name>
To: freebsd-gnats-submit@FreeBSD.org
Subject: sysutils/smartmontools - after last update includes full disk status in daily report
X-Send-Pr-Version: www-3.1
X-GNATS-Notify: samm@os2.kiev.ua

>Number:         185960
>Category:       ports
>Synopsis:       sysutils/smartmontools - after last update includes full disk status in daily report
>Confidential:   no
>Severity:       non-critical
>Priority:       low
>Responsible:    tijl
>State:          closed
>Quarter:        
>Keywords:       
>Date-Required:  
>Class:          sw-bug
>Submitter-Id:   current-users
>Arrival-Date:   Tue Jan 21 09:30:00 UTC 2014
>Closed-Date:    Mon Mar 03 19:59:32 CET 2014
>Last-Modified:  Mon Mar  3 19:00:05 UTC 2014
>Originator:     Volodymyr Kostyrko
>Release:        stable/10
>Organization:
none
>Environment:
FreeBSD ar1l0u 10.0-PRERELEASE FreeBSD 10.0-PRERELEASE #30 r260903M: Mon Jan 20 11:26:45 EET 2014     arcade@ar1l0u:/usr/obj/usr/src/sys/MINIMAL  amd64
>Description:
After last update smartmontools includes in daily run output full SMART status for all devices which is not exactly how it should work AFAIR. For periodic tasks good sane default was to output nothing if nothing bad happens and use logs for anything below warnings.
>How-To-Repeat:

>Fix:


>Release-Note:
>Audit-Trail:
State-Changed-From-To: open->feedback 
State-Changed-By: edwin 
State-Changed-When: Tue Jan 21 09:30:07 UTC 2014 
State-Changed-Why:  
Awaiting maintainers feedback (via the GNATS Auto Assign Tool) 

http://www.freebsd.org/cgi/query-pr.cgi?pr=185960 

From: Edwin Groothuis <edwin@FreeBSD.org>
To: samm@os2.kiev.ua
Cc: bug-followup@FreeBSD.org
Subject: Re: ports/185960: sysutils/smartmontools - after last update includes full disk status in daily report
Date: Tue, 21 Jan 2014 09:30:07 UT

 Maintainer of sysutils/smartmontools,
 
 Please note that PR ports/185960 has just been submitted.
 
 If it contains a patch for an upgrade, an enhancement or a bug fix
 you agree on, reply to this email stating that you approve the patch
 and a committer will take care of it.
 
 The full text of the PR can be found at:
     http://www.freebsd.org/cgi/query-pr.cgi?pr=ports/185960
 
 -- 
 Edwin Groothuis via the GNATS Auto Assign Tool
 edwin@FreeBSD.org

From: Tijl Coosemans <tijl@FreeBSD.org>
To: bug-followup@FreeBSD.org, arcade@b1t.name
Cc:  
Subject: Re: ports/185960: sysutils/smartmontools - after last update
 includes full disk status in daily report
Date: Mon, 27 Jan 2014 19:42:53 +0100

 Hi,
 
 This is a long shot but could you try the patch in
 http://www.freebsd.org/cgi/query-pr.cgi?pr=ports/186095

From: Volodymyr Kostyrko <arcade@b1t.name>
To: bug-followup@FreeBSD.org, tijl@freebsd.org
Cc:  
Subject: Re: ports/185960: sysutils/smartmontools - after last update includes
 full disk status in daily report
Date: Wed, 29 Jan 2014 12:58:27 +0200

 Hi.
 
 More data on this one. The root cause is `smartctl -H /dev/da1` 
 returning this:
 
 === START OF READ SMART DATA SECTION ===
 SMART STATUS RETURN: incomplete response, ATA output registers missing
 SMART overall-health self-assessment test result: PASSED
 Warning: This result is based on an Attribute check.
 
 $? is equal to 4 thus periodic script falls back to printing whole 
 device status.
 
 And yes, patch from ports/186095 is exactly about this and fixes 
 everything for me.
 
 -- 
 Sphinx of black quartz, judge my vow.
Responsible-Changed-From-To: freebsd-ports-bugs->tijl 
Responsible-Changed-By: tijl 
Responsible-Changed-When: Fri Jan 31 16:08:58 CET 2014 
Responsible-Changed-Why:  
Take. 

http://www.freebsd.org/cgi/query-pr.cgi?pr=185960 

From: =?utf-8?B?SsOBS8OTIEFuZHLDoXM=?= <jako.andras@eik.bme.hu>
To: bug-followup@FreeBSD.org
Cc:  
Subject: ports/185960: sysutils/smartmontools - after last update includes
 full disk status in daily report
Date: Sun, 2 Feb 2014 18:08:58 +0100

 Exactly the same problem here, and the patch works for me too. Thanks!
 
 András
State-Changed-From-To: feedback->closed 
State-Changed-By: tijl 
State-Changed-When: Mon Mar 3 19:59:00 CET 2014 
State-Changed-Why:  
Fixed in r346953. 

http://www.freebsd.org/cgi/query-pr.cgi?pr=185960 

From: dfilter@FreeBSD.ORG (dfilter service)
To: bug-followup@FreeBSD.org
Cc:  
Subject: Re: ports/185960: commit references a PR
Date: Mon,  3 Mar 2014 18:58:31 +0000 (UTC)

 Author: tijl
 Date: Mon Mar  3 18:58:14 2014
 New Revision: 346953
 URL: http://svnweb.freebsd.org/changeset/ports/346953
 QAT: https://qat.redports.org/buildarchive/r346953/
 
 Log:
   Improve the FreeBSD SCSI and SAS support in smartmontools:
   - Remove unused private fields from some classes (found by Clang).
   - In freebsd_scsi_device::scsi_pass_through:
     * Make sure this function returns false on error instead of an error
       code that gets converted to true.
     * Put printing of the "Incoming data" debug info right after the
       cam_send_ccb() call and before the error checking to make
       debugging easier.
     * When copying sense data make sure the fields in the CCB are
       actually valid with CAM_AUTOSNS_VALID.  Also make sure that the
       size of the sense data doesn't overflow max_sense_len.  This was
       the real cause for the crash in ports/181836.
     * Add some debug printing on the sense data.
   
   Committed upstream as r3873.
   
   PR:		ports/181836, ports/185960, ports/186095
   Tested by:	many
 
 Modified:
   head/sysutils/smartmontools/Makefile
   head/sysutils/smartmontools/files/patch-os_freebsd.cpp
 
 Modified: head/sysutils/smartmontools/Makefile
 ==============================================================================
 --- head/sysutils/smartmontools/Makefile	Mon Mar  3 18:56:44 2014	(r346952)
 +++ head/sysutils/smartmontools/Makefile	Mon Mar  3 18:58:14 2014	(r346953)
 @@ -3,7 +3,7 @@
  
  PORTNAME=	smartmontools
  PORTVERSION=	6.2
 -PORTREVISION=	1
 +PORTREVISION=	2
  CATEGORIES=	sysutils
  MASTER_SITES=	SF
  
 
 Modified: head/sysutils/smartmontools/files/patch-os_freebsd.cpp
 ==============================================================================
 --- head/sysutils/smartmontools/files/patch-os_freebsd.cpp	Mon Mar  3 18:56:44 2014	(r346952)
 +++ head/sysutils/smartmontools/files/patch-os_freebsd.cpp	Mon Mar  3 18:58:14 2014	(r346953)
 @@ -1,6 +1,44 @@
  --- os_freebsd.cpp.orig	2013-07-05 12:40:38.000000000 +0200
 -+++ os_freebsd.cpp	2013-12-25 20:54:46.000000000 +0100
 -@@ -445,7 +445,8 @@
 ++++ os_freebsd.cpp	2014-03-03 19:16:11.000000000 +0100
 +@@ -75,7 +75,7 @@
 + #define PATHINQ_SETTINGS_SIZE   128
 + #endif
 + 
 +-const char *os_XXXX_c_cvsid="$Id: os_freebsd.cpp 3824 2013-07-05 10:40:38Z samm2 $" \
 ++const char *os_XXXX_c_cvsid="$Id: os_freebsd.cpp 3874 2014-02-18 00:47:23Z 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
 +@@ -135,9 +135,9 @@
 + : virtual public /*implements*/ smart_device
 + {
 + public:
 +-  explicit freebsd_smart_device(const char * mode)
 ++  explicit freebsd_smart_device()
 +     : smart_device(never_called),
 +-      m_fd(-1), m_mode(mode) { }
 ++      m_fd(-1) { }
 + 
 +   virtual ~freebsd_smart_device() throw();
 + 
 +@@ -157,7 +157,6 @@
 + 
 + private:
 +   int m_fd; ///< filedesc, -1 if not open.
 +-  const char * m_mode; ///< Mode string for deviceopen().
 + };
 + 
 + #ifdef __GLIBC__
 +@@ -249,7 +248,7 @@
 + 
 + freebsd_ata_device::freebsd_ata_device(smart_interface * intf, const char * dev_name, const char * req_type)
 + : smart_device(intf, dev_name, "ata", req_type),
 +-  freebsd_smart_device("ATA")
 ++  freebsd_smart_device()
 + {
 + }
 + 
 +@@ -445,7 +444,8 @@
     }
   
     if ((ccb.ccb_h.status & CAM_STATUS_MASK) != CAM_REQ_CMP) {
 @@ -10,22 +48,230 @@
       set_err(EIO);
       return -1;
     }
 -@@ -997,13 +998,15 @@
 +@@ -489,10 +489,7 @@
 + freebsd_escalade_device::freebsd_escalade_device(smart_interface * intf, const char * dev_name,
 +     int escalade_type, int disknum)
 + : smart_device(intf, dev_name, "3ware", "3ware"),
 +-  freebsd_smart_device(
 +-    escalade_type==CONTROLLER_3WARE_9000_CHAR ? "ATA_3WARE_9000" :
 +-    escalade_type==CONTROLLER_3WARE_678K_CHAR ? "ATA_3WARE_678K" :
 +-    /*             CONTROLLER_3WARE_678K     */ "ATA"             ),
 ++  freebsd_smart_device(),
 +   m_escalade_type(escalade_type), m_disknum(disknum)
 + {
 +   set_info().info_name = strprintf("%s [3ware_disk_%02d]", dev_name, disknum);
 +@@ -704,7 +701,7 @@
 + freebsd_highpoint_device::freebsd_highpoint_device(smart_interface * intf, const char * dev_name,
 +   unsigned char controller, unsigned char channel, unsigned char port)
 + : smart_device(intf, dev_name, "hpt", "hpt"),
 +-  freebsd_smart_device("ATA")
 ++  freebsd_smart_device()
 + {
 +   m_hpt_data[0] = controller; m_hpt_data[1] = channel; m_hpt_data[2] = port;
 +   set_info().info_name = strprintf("%s [hpt_disk_%u/%u/%u]", dev_name, m_hpt_data[0], m_hpt_data[1], m_hpt_data[2]);
 +@@ -897,7 +894,6 @@
 +   virtual bool close();
 +   
 + private:
 +-  int m_fd;
 +   struct cam_device *m_camdev;
 + };
 + 
 +@@ -921,17 +917,16 @@
 + freebsd_scsi_device::freebsd_scsi_device(smart_interface * intf,
 +   const char * dev_name, const char * req_type)
 + : smart_device(intf, dev_name, "scsi", req_type),
 +-  freebsd_smart_device("SCSI")
 ++  freebsd_smart_device()
 + {
 + }
 + 
 + 
 + bool freebsd_scsi_device::scsi_pass_through(scsi_cmnd_io * iop)
 + {
 +-  int report=scsi_debugmode;
 +   union ccb *ccb;
 + 
 +-  if (report > 0) {
 ++  if (scsi_debugmode) {
 +     unsigned int k;
 +     const unsigned char * ucp = iop->cmnd;
 +     const char * np;
 +@@ -940,7 +935,7 @@
 +     pout(" [%s: ", np ? np : "<unknown opcode>");
 +     for (k = 0; k < iop->cmnd_len; ++k)
 +       pout("%02x ", ucp[k]);
 +-    if ((report > 1) && 
 ++    if ((scsi_debugmode > 1) && 
 +       (DXFER_TO_DEVICE == iop->dxfer_dir) && (iop->dxferp)) {
 +     int trunc = (iop->dxfer_len > 256) ? 1 : 0;
 + 
 +@@ -949,18 +944,21 @@
 +     dStrHex(iop->dxferp, (trunc ? 256 : iop->dxfer_len) , 1);
 +       }
 +       else
 +-        pout("]");
 ++        pout("]\n");
 +   }
 + 
 +   if(m_camdev==NULL) {
 +-    warnx("error: camdev=0!");
 +-    return -ENOTTY;
 ++    if (scsi_debugmode)
 ++      pout("  error: camdev=0!\n");
 ++    return set_err(ENOTTY);
 +   }
 + 
 +   if (!(ccb = cam_getccb(m_camdev))) {
 +-    warnx("error allocating ccb");
 +-    return -ENOMEM;
 ++    if (scsi_debugmode)
 ++      pout("  error allocating ccb\n");
 ++    return set_err(ENOMEM);
 +   }
 ++
 +   // mfi SAT layer is known to be buggy
 +   if(!strcmp("mfi",m_camdev->sim_name)) {
 +     if (iop->cmnd[0] == SAT_ATA_PASSTHROUGH_12 || iop->cmnd[0] == SAT_ATA_PASSTHROUGH_16) { 
 +@@ -984,8 +982,8 @@
 +     sizeof(struct ccb_scsiio) - sizeof(struct ccb_hdr));
 + 
 +   cam_fill_csio(&ccb->csio,
 +-    /*retrires*/ 1,
 +-    /*cbfcnp*/ NULL,
 ++    /* retries */ 1,
 ++    /* cbfcnp */ NULL,
 +     /* flags */ (iop->dxfer_dir == DXFER_NONE ? CAM_DIR_NONE :(iop->dxfer_dir == DXFER_FROM_DEVICE ? CAM_DIR_IN : CAM_DIR_OUT)),
 +     /* tagaction */ MSG_SIMPLE_Q_TAG,
 +     /* dataptr */ iop->dxferp,
 +@@ -996,44 +994,81 @@
 +   memcpy(ccb->csio.cdb_io.cdb_bytes,iop->cmnd,iop->cmnd_len);
   
     if (cam_send_ccb(m_camdev,ccb) < 0) {
 -     warn("error sending SCSI ccb");
 +-    warn("error sending SCSI ccb");
  -    cam_error_print(m_camdev,ccb,CAM_ESF_ALL,CAM_EPF_ALL,stderr);
 -+    if (report > 0)
 ++    if (scsi_debugmode) {
 ++      pout("  error sending SCSI ccb\n");
  +      cam_error_print(m_camdev,ccb,CAM_ESF_ALL,CAM_EPF_ALL,stderr);
 ++    }
       cam_freeccb(ccb);
 -     return -EIO;
 +-    return -EIO;
 ++    return set_err(EIO);
 ++  }
 ++
 ++  if (scsi_debugmode) {
 ++    pout("  CAM status=0x%x, SCSI status=0x%x, resid=0x%x\n",
 ++         ccb->ccb_h.status, ccb->csio.scsi_status, ccb->csio.resid);
 ++    if ((scsi_debugmode > 1) && (DXFER_FROM_DEVICE == iop->dxfer_dir)) {
 ++      int trunc, len;
 ++
 ++      len = iop->dxfer_len - ccb->csio.resid;
 ++      trunc = (len > 256) ? 1 : 0;
 ++      if (len > 0) {
 ++        pout("  Incoming data, len=%d%s:\n", len,
 ++             (trunc ? " [only first 256 bytes shown]" : ""));
 ++        dStrHex(iop->dxferp, (trunc ? 256 : len), 1);
 ++      }
 ++      else
 ++        pout("  Incoming data trimmed to nothing by resid\n");
 ++    }
     }
   
 --  if (((ccb->ccb_h.status & CAM_STATUS_MASK) != CAM_REQ_CMP) && ((ccb->ccb_h.status & CAM_STATUS_MASK) != CAM_SCSI_STATUS_ERROR)) {
 +   if (((ccb->ccb_h.status & CAM_STATUS_MASK) != CAM_REQ_CMP) && ((ccb->ccb_h.status & CAM_STATUS_MASK) != CAM_SCSI_STATUS_ERROR)) {
  -    cam_error_print(m_camdev,ccb,CAM_ESF_ALL,CAM_EPF_ALL,stderr);
 -+  if ((ccb->ccb_h.status & CAM_STATUS_MASK) != CAM_REQ_CMP) {
 -+    if(report > 0)
 ++    if (scsi_debugmode)
  +      cam_error_print(m_camdev,ccb,CAM_ESF_ALL,CAM_EPF_ALL,stderr);
       cam_freeccb(ccb);
 -     return -EIO;
 +-    return -EIO;
 ++    return set_err(EIO);
 +   }
 + 
 +-  if (iop->sensep) {
 ++  iop->resid = ccb->csio.resid;
 ++  iop->scsi_status = ccb->csio.scsi_status;
 ++  if (iop->sensep && (ccb->ccb_h.status & CAM_AUTOSNS_VALID) != 0) {
 ++    if (scsi_debugmode)
 ++      pout("  sense_len=0x%x, sense_resid=0x%x\n",
 ++           ccb->csio.sense_len, ccb->csio.sense_resid);
 +     iop->resp_sense_len = ccb->csio.sense_len - ccb->csio.sense_resid;
 +-    memcpy(iop->sensep,&(ccb->csio.sense_data),iop->resp_sense_len);
 ++    /* Some SCSI controller device drivers miscalculate the sense_resid
 ++       field so cap resp_sense_len on max_sense_len. */
 ++    if (iop->resp_sense_len > iop->max_sense_len)
 ++      iop->resp_sense_len = iop->max_sense_len;
 ++    if (iop->resp_sense_len > 0) {
 ++      memcpy(iop->sensep, &(ccb->csio.sense_data), iop->resp_sense_len);
 ++      if (scsi_debugmode) {
 ++        if (scsi_debugmode > 1) {
 ++          pout("  >>> Sense buffer, len=%zu:\n", iop->resp_sense_len);
 ++          dStrHex(iop->sensep, iop->resp_sense_len, 1);
 ++        }
 ++        if ((iop->sensep[0] & 0x7f) > 0x71)
 ++          pout("  status=0x%x: [desc] sense_key=0x%x asc=0x%x ascq=0x%x\n",
 ++               iop->scsi_status, iop->sensep[1] & 0xf,
 ++               iop->sensep[2], iop->sensep[3]);
 ++        else
 ++          pout("  status=0x%x: sense_key=0x%x asc=0x%x ascq=0x%x\n",
 ++               iop->scsi_status, iop->sensep[2] & 0xf,
 ++               iop->sensep[12], iop->sensep[13]);
 ++      }
 ++    }
 ++    else if (scsi_debugmode)
 ++      pout("  status=0x%x\n", iop->scsi_status);
 +   }
 +-
 +-  iop->scsi_status = ccb->csio.scsi_status;
 ++  else if (scsi_debugmode)
 ++    pout("  status=0x%x\n", iop->scsi_status);
 + 
 +   cam_freeccb(ccb);
 + 
 +-  if (report > 0) {
 +-    int trunc;
 +-
 +-    pout("  status=0\n");
 +-    trunc = (iop->dxfer_len > 256) ? 1 : 0;
 +-
 +-    pout("  Incoming data, len=%d%s:\n", (int)iop->dxfer_len,
 +-      (trunc ? " [only first 256 bytes shown]" : ""));
 +-    dStrHex(iop->dxferp, (trunc ? 256 : iop->dxfer_len) , 1);
 +-  }
 +-
 +   // mfip replacing PDT of the device so response does not make a sense
 +   // this sets PDT to 00h - direct-access block device
 +   if((!strcmp("mfi", m_camdev->sim_name) || !strcmp("mpt", m_camdev->sim_name))
 +    && iop->cmnd[0] == INQUIRY) {
 +-     if (report > 0) {
 +-        pout("device on %s controller, patching PDT\n", m_camdev->sim_name);
 ++     if (scsi_debugmode) {
 ++        pout("  device on %s controller, patching PDT\n", m_camdev->sim_name);
 +      }
 +      iop->dxferp[0] = iop->dxferp[0] & 0xe0;
     }
 +@@ -1077,7 +1112,7 @@
 + // Areca RAID Controller(SATA Disk)
 + freebsd_areca_ata_device::freebsd_areca_ata_device(smart_interface * intf, const char * dev_name, int disknum, int encnum)
 + : smart_device(intf, dev_name, "areca", "areca"),
 +-  freebsd_smart_device("ATA")
 ++  freebsd_smart_device()
 + {
 +   set_disknum(disknum);
 +   set_encnum(encnum);
 +@@ -1146,7 +1181,7 @@
 + // Areca RAID Controller(SAS Device)
 + freebsd_areca_scsi_device::freebsd_areca_scsi_device(smart_interface * intf, const char * dev_name, int disknum, int encnum)
 + : smart_device(intf, dev_name, "areca", "areca"),
 +-  freebsd_smart_device("SCSI")
 ++  freebsd_smart_device()
 + {
 +   set_disknum(disknum);
 +   set_encnum(encnum);
 +@@ -1220,7 +1255,7 @@
 + freebsd_cciss_device::freebsd_cciss_device(smart_interface * intf,
 +   const char * dev_name, unsigned char disknum)
 + : smart_device(intf, dev_name, "cciss", "cciss"),
 +-  freebsd_smart_device("SCSI"),
 ++  freebsd_smart_device(),
 +   m_disknum(disknum)
 + {
 +   set_info().info_name = strprintf("%s [cciss_disk_%02d]", dev_name, disknum);
 _______________________________________________
 svn-ports-all@freebsd.org mailing list
 http://lists.freebsd.org/mailman/listinfo/svn-ports-all
 To unsubscribe, send any mail to "svn-ports-all-unsubscribe@freebsd.org"
 
>Unformatted:
