diff --git a/sysutils/smartmontools/Makefile b/sysutils/smartmontools/Makefile index 6622eb116de5..c92939322cff 100644 --- a/sysutils/smartmontools/Makefile +++ b/sysutils/smartmontools/Makefile @@ -1,45 +1,46 @@ # New ports collection makefile for: smartmontools # Date created: 12 October 2003 # Whom: Eduard Martinescu # # $FreeBSD$ # PORTNAME= smartmontools PORTVERSION= 5.42 +PORTREVISION= 1 CATEGORIES= sysutils MASTER_SITES= SF MAINTAINER= samm@os2.kiev.ua COMMENT= S.M.A.R.T. disk monitoring tools LICENSE= GPLv2 CONFLICTS= smartmontools-devel-[0-9]* USE_GMAKE= yes # hack to prevent gmake failure on 6.xx GMAKE= make GNU_CONFIGURE= yes CONFIGURE_ARGS= --disable-dependency-tracking \ --enable-drivedb --enable-sample \ --with-docdir=${DOCSDIR} --with-initscriptdir=${PREFIX}/etc/rc.d SUB_FILES= pkg-message smart USE_RC_SUBR= smartd MAN5= smartd.conf.5 MAN8= smartd.8 smartctl.8 CFLAGS:= ${CFLAGS:S/-O2/-O/} -Wno-write-strings post-patch: @${REINPLACE_CMD} -e 's| install-initdDATA| |' ${WRKSRC}/Makefile.in post-install: ${MKDIR} ${PREFIX}/etc/periodic/daily ${INSTALL_SCRIPT} ${WRKDIR}/smart ${PREFIX}/etc/periodic/daily/smart ${INSTALL_SCRIPT} ${WRKSRC}/smartd.freebsd.initd ${PREFIX}/etc/rc.d/smartd @${CAT} ${PKGMESSAGE} .include diff --git a/sysutils/smartmontools/files/patch-freebsd9 b/sysutils/smartmontools/files/patch-freebsd9 new file mode 100644 index 000000000000..c34f077cd6cd --- /dev/null +++ b/sysutils/smartmontools/files/patch-freebsd9 @@ -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 --git a/sysutils/smartmontools/files/patch-lsibugs b/sysutils/smartmontools/files/patch-lsibugs new file mode 100644 index 000000000000..60f7988291e3 --- /dev/null +++ b/sysutils/smartmontools/files/patch-lsibugs @@ -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 \ No newline at end of file