smartmontools on FreeBSD 4.x - compile error + ahc card dump

Don Lewis dl at catspoiler.org
Fri Sep 3 11:40:58 PDT 2004


The latest version of smartmontools is broken on FreeBSD 4.x (and older
versions of 5.x that don't have the latest version of <inttypes.h>).  I
can get the code to compile with the patch below, but then I get runtime
kernel errors.  Smartmontools-5.30 seems to work fine on FreeBSD 4.x.

The only suspicious change that I've seen so far is that
smartmontools-5.32 passes a non-zero timeout to do_scsi_cmnd_io(), which
passes it to  cam_fill_csio() and cam_send_ccb(), whereas 5.30 passes
zero in most cases.  Suspicion confirmed ... if I force the timeout to
zero in do_scsi_cmnd_io(), smartctl -A works properly.


ahc0: Recovery Initiated
>>>>>>>>>>>>>>>>>> Dump Card State Begins <<<<<<<<<<<<<<<<<
ahc0: Dumping Card State while idle, at SEQADDR 0x8
Card was paused
ACCUM = 0x4, SINDEX = 0x64, DINDEX = 0x65, ARG_2 = 0x0
HCNT = 0x0 SCBPTR = 0x19
SCSIPHASE[0x8]:(MSG_IN_PHASE) SCSISIGI[0xe6]:(REQI|BSYI|MSGI|IOI|CDI) 
ERROR[0x0] SCSIBUSL[0x80] LASTPHASE[0x1]:(P_BUSFREE) 
SCSISEQ[0x12]:(ENAUTOATNP|ENRSELI) SBLKCTL[0xa]:(SELWIDE|SELBUSB) 
SCSIRATE[0x0] SEQCTL[0x10]:(FASTMODE) SEQ_FLAGS[0xc0]:(NO_CDB_SENT|NOT_IDENTIFIED) 
SSTAT0[0x20]:(SELDI) SSTAT1[0x19]:(REQINIT|BUSFREE|PHASEMIS) 
SSTAT2[0x0] SSTAT3[0x0] SIMODE0[0x8]:(ENSWRAP) SIMODE1[0xac]:(ENSCSIPERR|ENBUSFREE|ENSCSIRST|ENSELTIMO) 
SXFRCTL0[0x80]:(DFON) DFCNTRL[0x0] 
DFSTATUS[0x89]:(FIFOEMP|HDONE|PRELOAD_AVAIL) 
STACK: 0x0 0x164 0x179 0x3
SCB count = 70
Kernel NEXTQSCB = 25
Card NEXTQSCB = 25
QINFIFO entries: 
Waiting Queue entries: 
Disconnected Queue entries: 25:0 
QOUTFIFO entries: 
Sequencer Free SCB List: 18 14 11 7 26 3 13 22 5 8 19 15 6 1 17 28 27 24 30 
16 10 23 0 4 31 2 9 29 21 20 12 
Sequencer SCB Info: 
  0 SCB_CONTROL[0xe0]:(TAG_ENB|DISCENB|TARGET_SCB) SCB_SCSIID[0x7] 
SCB_LUN[0x0] SCB_TAG[0xff] 
  1 SCB_CONTROL[0xe0]:(TAG_ENB|DISCENB|TARGET_SCB) SCB_SCSIID[0x7] 
SCB_LUN[0x0] SCB_TAG[0xff] 
  2 SCB_CONTROL[0xe0]:(TAG_ENB|DISCENB|TARGET_SCB) SCB_SCSIID[0x7] 
SCB_LUN[0x0] SCB_TAG[0xff] 
  3 SCB_CONTROL[0xe0]:(TAG_ENB|DISCENB|TARGET_SCB) SCB_SCSIID[0x7] 
SCB_LUN[0x0] SCB_TAG[0xff] 
  4 SCB_CONTROL[0xe0]:(TAG_ENB|DISCENB|TARGET_SCB) SCB_SCSIID[0x7] 
SCB_LUN[0x0] SCB_TAG[0xff] 
  5 SCB_CONTROL[0xe0]:(TAG_ENB|DISCENB|TARGET_SCB) SCB_SCSIID[0x7] 
SCB_LUN[0x0] SCB_TAG[0xff] 
  6 SCB_CONTROL[0xe0]:(TAG_ENB|DISCENB|TARGET_SCB) SCB_SCSIID[0x7] 
SCB_LUN[0x0] SCB_TAG[0xff] 
  7 SCB_CONTROL[0xe0]:(TAG_ENB|DISCENB|TARGET_SCB) SCB_SCSIID[0x7] 
SCB_LUN[0x0] SCB_TAG[0xff] 
  8 SCB_CONTROL[0xe0]:(TAG_ENB|DISCENB|TARGET_SCB) SCB_SCSIID[0x7] 
SCB_LUN[0x0] SCB_TAG[0xff] 
  9 SCB_CONTROL[0xe0]:(TAG_ENB|DISCENB|TARGET_SCB) SCB_SCSIID[0x7] 
SCB_LUN[0x0] SCB_TAG[0xff] 
 10 SCB_CONTROL[0xe0]:(TAG_ENB|DISCENB|TARGET_SCB) SCB_SCSIID[0x7] 
SCB_LUN[0x0] SCB_TAG[0xff] 
 11 SCB_CONTROL[0xe0]:(TAG_ENB|DISCENB|TARGET_SCB) SCB_SCSIID[0x7] 
SCB_LUN[0x0] SCB_TAG[0xff] 
 12 SCB_CONTROL[0xe0]:(TAG_ENB|DISCENB|TARGET_SCB) SCB_SCSIID[0x7]





------ Forwarded message ------
    From: Don Lewis <truckman at FreeBSD.org>
 Subject: Re: cvs commit: ports/sysutils/smartmontools Makefile
    Date: Fri, 3 Sep 2004 10:29:39 -0700 (PDT)
      To: stolz at i2.informatik.rwth-aachen.de

On  3 Sep, Volker Stolz wrote:
> Am 03. Sep 2004 um 11:17 CEST schrieb Don Lewis:
>> On  3 Sep, Volker Stolz wrote:
>> > vs          2004-09-03 08:32:28 UTC
>> > 
>> >   FreeBSD ports repository
>> > 
>> >   Modified files:
>> >     sysutils/smartmontools Makefile 
>> >   Log:
>> >   Mark as IGNORE for OSVERSION < 501105: Needs ATAng
>> 
>> Not quite true.  It works fine with SCSI.
> 
> But the port doesn't compile. Do you have any patches or could you
> tell me where to start looking? Is there a switch for disabling the
> breaking part of the build?> 
> Cheers,
>   Volker

The following patch fixes the compile problem on 4-STABLE.  The FreeBSD
version is the closest to when <inttypes.h> was changed to match the
standard.  I get a bunch of SCSI errors when I try to run it though.

--- int64.h.orig	Mon Mar 15 11:47:22 2004
+++ int64.h	Fri Sep  3 10:13:56 2004
@@ -35,6 +35,9 @@
 #ifdef HAVE_STDINT_H
 #include <stdint.h>
 #else
+#if __FreeBSD_version <= 500042
+#include <inttypes.h>
+#else
 #if defined(_WIN32) && defined(_MSC_VER)
 // for MSVC 6.0
 typedef          __int64    int64_t;
@@ -44,11 +47,12 @@
 typedef          long long  int64_t;
 typedef unsigned long long uint64_t;
 #endif // _WIN32 && _MSC_VER
+#endif // __FreeBSD_version <= 500042
 #endif // HAVE_STDINT_H
 #endif // HAVE_SSYS_INT_TYPES_H
 // 64 bit integer format strings
 
-#ifdef HAVE_INTTYPES_H
+#if defined(HAVE_INTTYPES_H) && __FreeBSD_version > 500042
 #include <inttypes.h>
 #else
 #if defined(_WIN32) && defined(_MSC_VER)



More information about the freebsd-scsi mailing list