ports/162276: [MAINTAINER] sysutils/smartmontools: Fix crash on FreeBSD9, fix LSI RAID bugs

Alex Samorukov samm at os2.kiev.ua
Thu Nov 3 21:00:24 UTC 2011


>Number:         162276
>Category:       ports
>Synopsis:       [MAINTAINER] sysutils/smartmontools: Fix crash on FreeBSD9, fix LSI RAID bugs
>Confidential:   no
>Severity:       serious
>Priority:       low
>Responsible:    freebsd-ports-bugs
>State:          open
>Quarter:        
>Keywords:       
>Date-Required:
>Class:          maintainer-update
>Submitter-Id:   current-users
>Arrival-Date:   Thu Nov 03 21:00:22 UTC 2011
>Closed-Date:
>Last-Modified:
>Originator:     Alex Samorukov
>Release:        FreeBSD 8.2-RELEASE i386
>Organization:
NetArt s.r.o.
>Environment:
System: FreeBSD bsd 8.2-RELEASE FreeBSD 8.2-RELEASE #0: Fri Feb 18 02:24:46 UTC 2011
>Description:
This PR contain 2 important fixes from upstream (SVN):
1) It fixing crash with SCSI devices on FreeBSD9
2) It fix weird bugs caused by LSI firmware with SATA devices

Added file(s):
- files/patch-freebsd9
- files/patch-lsibugs

Generated with FreeBSD Port Tools 0.99
>How-To-Repeat:
>Fix:

--- smartmontools-5.42_1.patch begins here ---
diff -ruN --exclude=CVS /usr/ports/sysutils/smartmontools/Makefile /root/smartmontools/Makefile
--- /usr/ports/sysutils/smartmontools/Makefile	2011-10-21 09:37:57.000000000 +0200
+++ /root/smartmontools/Makefile	2011-11-03 21:45:51.000000000 +0100
@@ -7,6 +7,7 @@
 
 PORTNAME=	smartmontools
 PORTVERSION=	5.42
+PORTREVISION=	1
 CATEGORIES=	sysutils
 MASTER_SITES=	SF
 
diff -ruN --exclude=CVS /usr/ports/sysutils/smartmontools/files/patch-freebsd9 /root/smartmontools/files/patch-freebsd9
--- /usr/ports/sysutils/smartmontools/files/patch-freebsd9	1970-01-01 01:00:00.000000000 +0100
+++ /root/smartmontools/files/patch-freebsd9	2011-11-03 21:41:25.000000000 +0100
@@ -0,0 +1,13 @@
+--- os_freebsd.cpp	2011/11/03 17:50:35	3466
++++ os_freebsd.cpp	2011/11/03 20:06:19	3468
+@@ -1058,8 +1058,8 @@
+   }
+ 
+   if (iop->sensep) {
+-    memcpy(iop->sensep,&(ccb->csio.sense_data),sizeof(struct scsi_sense_data));
+-    iop->resp_sense_len = sizeof(struct scsi_sense_data);
++    iop->resp_sense_len = ccb->csio.sense_len - ccb->csio.sense_resid;
++    memcpy(iop->sensep,&(ccb->csio.sense_data),iop->resp_sense_len);
+   }
+ 
+   iop->scsi_status = ccb->csio.scsi_status;
diff -ruN --exclude=CVS /usr/ports/sysutils/smartmontools/files/patch-lsibugs /root/smartmontools/files/patch-lsibugs
--- /usr/ports/sysutils/smartmontools/files/patch-lsibugs	1970-01-01 01:00:00.000000000 +0100
+++ /root/smartmontools/files/patch-lsibugs	2011-11-03 21:44:38.000000000 +0100
@@ -0,0 +1,44 @@
+--- os_freebsd.cpp	2011/10/06 16:43:44	3423
++++ os_freebsd.cpp	2011/11/03 17:50:35	3466
+@@ -1013,6 +1013,20 @@
+     warnx("error allocating ccb");
+     return -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) { 
++      // Controller does not return ATA output registers in SAT sense data
++      if (iop->cmnd[2] & (1 << 5)) // chk_cond
++        return set_err(ENOSYS, "ATA return descriptor not supported by controller firmware");
++    }
++    // SMART WRITE LOG SECTOR causing media errors
++    if ((iop->cmnd[0] == SAT_ATA_PASSTHROUGH_16 && iop->cmnd[14] == ATA_SMART_CMD 
++        && iop->cmnd[3]==0 && iop->cmnd[4] == ATA_SMART_WRITE_LOG_SECTOR) || 
++        (iop->cmnd[0] == SAT_ATA_PASSTHROUGH_12 && iop->cmnd[9] == ATA_SMART_CMD &&
++        iop->cmnd[3] == ATA_SMART_WRITE_LOG_SECTOR)) 
++      return set_err(ENOSYS, "SMART WRITE LOG SECTOR command is not supported by controller firmware"); 
++  }
+ 
+   // clear out structure, except for header that was filled in for us
+   bzero(&(&ccb->ccb_h)[1],
+@@ -1590,12 +1604,18 @@
+     return this;
+   }
+ 
+-  // SAT or USB ?
++  // SAT or USB, skip MFI controllers because of bugs
+   {
+     smart_device * newdev = smi()->autodetect_sat_device(this, req_buff, len);
+-    if (newdev)
++    if (newdev) {
+       // NOTE: 'this' is now owned by '*newdev'
++      if(!strcmp("mfi",m_camdev->sim_name)) {
++        newdev->close();
++        newdev->set_err(ENOSYS, "SATA device detected,\n"
++          "MegaRAID SAT layer is reportedly buggy, use '-d sat' to try anyhow");
++      }
+       return newdev;
++    }
+   }
+ 
+   // Nothing special found
--- smartmontools-5.42_1.patch ends here ---

>Release-Note:
>Audit-Trail:
>Unformatted:



More information about the freebsd-ports-bugs mailing list