From olivleh1@kartoffel.salatschuessel.net  Mon May 23 13:20:34 2005
Return-Path: <olivleh1@kartoffel.salatschuessel.net>
Received: from mx1.FreeBSD.org (mx1.freebsd.org [216.136.204.125])
	by hub.freebsd.org (Postfix) with ESMTP id C7F1116A41C;
	Mon, 23 May 2005 13:20:34 +0000 (GMT)
	(envelope-from olivleh1@kartoffel.salatschuessel.net)
Received: from kartoffel.salatschuessel.net (p5084E879.dip.t-dialin.net [80.132.232.121])
	by mx1.FreeBSD.org (Postfix) with ESMTP id E44C643D49;
	Mon, 23 May 2005 13:20:33 +0000 (GMT)
	(envelope-from olivleh1@kartoffel.salatschuessel.net)
Received: from kartoffel.salatschuessel.net (localhost [127.0.0.1])
	by kartoffel.salatschuessel.net (8.13.3/8.13.3) with ESMTP id j4NDKVAQ016057;
	Mon, 23 May 2005 15:20:31 +0200 (CEST)
	(envelope-from olivleh1@kartoffel.salatschuessel.net)
Received: (from olivleh1@localhost)
	by kartoffel.salatschuessel.net (8.13.3/8.13.3/Submit) id j4NDKTQS016056;
	Mon, 23 May 2005 15:20:29 +0200 (CEST)
	(envelope-from olivleh1)
Message-Id: <200505231320.j4NDKTQS016056@kartoffel.salatschuessel.net>
Date: Mon, 23 May 2005 15:20:29 +0200 (CEST)
From: Oliver Lehmann <oliver@freebsd.org>
Reply-To: Oliver Lehmann <oliver@freebsd.org>
To: FreeBSD-gnats-submit@freebsd.org
Cc: Oliver Lehmann <oliver@freebsd.org>, martines@rochester.rr.com,
        sos@freebsd.org
Subject: smartmontools is malfunctioning on FreeBSD > 600027
X-Send-Pr-Version: 3.113
X-GNATS-Notify:

>Number:         81403
>Category:       ports
>Synopsis:       smartmontools is malfunctioning on FreeBSD > 600027
>Confidential:   no
>Severity:       non-critical
>Priority:       low
>Responsible:    oliver
>State:          closed
>Quarter:        
>Keywords:       
>Date-Required:  
>Class:          update
>Submitter-Id:   current-users
>Arrival-Date:   Mon May 23 13:30:05 GMT 2005
>Closed-Date:    Wed May 25 01:16:16 GMT 2005
>Last-Modified:  Wed May 25 01:16:16 GMT 2005
>Originator:     Oliver Lehmann
>Release:        FreeBSD 6.0-CURRENT amd64
>Organization:
>Environment:
System: FreeBSD kartoffel.salatschuessel.net 6.0-CURRENT FreeBSD 6.0-CURRENT #0: Sat May 21 09:29:57 CEST 2005 olivleh1@kartoffel.salatschuessel.net:/usr/obj/usr/src/sys/KARTOFFEL amd64


>Description:
	http://www.freebsd.org/cgi/cvsweb.cgi/src/sys/sys/ata.h?f=h#rev1.26
	that change causes smartmontools to malfunctioning

>How-To-Repeat:
>Fix:


--- patch-smartmontools begins here ---
Index: Makefile
===================================================================
RCS file: /home/pcvs/ports/sysutils/smartmontools/Makefile,v
retrieving revision 1.16
diff -u -r1.16 Makefile
--- Makefile	9 May 2005 10:00:14 -0000	1.16
+++ Makefile	23 May 2005 13:17:44 -0000
@@ -29,6 +29,13 @@
 EXAMPLES=	smartd.conf examplescripts/README examplescripts/Example?
 RC_SCRIPTS_SUB=	PREFIX=${PREFIX} RC_SUBR=${RC_SUBR}
 
+.include <bsd.port.pre.mk>
+
+.if ${OSVERSION} > 600027
+BROKEN=		The way ioctls are issue to ATA changed which makes smartmontools malfunctioning
+.endif
+
+
 post-build:
 	${SED}	${RC_SCRIPTS_SUB:S/$/!g/:S/^/ -e s!%%/:S/=/%%!/} \
 		${FILESDIR}/smartd.sh > ${WRKDIR}/smartd.sh
@@ -46,8 +53,6 @@
 	cd ${WRKSRC} && ${INSTALL_DATA} ${DOCS} ${DOCSDIR}
 .endif
 
-.include <bsd.port.pre.mk>
-
 post-install:
 	${CAT} ${PKGMESSAGE}
 
--- patch-smartmontools ends here ---


>Release-Note:
>Audit-Trail:
Responsible-Changed-From-To: freebsd-ports-bugs->oliver 
Responsible-Changed-By: oliver 
Responsible-Changed-When: Mon May 23 13:34:27 GMT 2005 
Responsible-Changed-Why:  
I'll handle it 

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

From: Oliver Lehmann <oliver@FreeBSD.org>
To: bug-followup@FreeBSD.org
Cc: sos@FreeBSD.org, martines@rochester.rr.com
Subject: Re: ports/81403: smartmontools is malfunctioning on FreeBSD >
 600027
Date: Mon, 23 May 2005 16:38:08 +0200

 This is a multi-part message in MIME format.
 
 --Multipart=_Mon__23_May_2005_16_38_08_+0200_X32DAzuq8LgvxqHn
 Content-Type: text/plain; charset=US-ASCII
 Content-Transfer-Encoding: 7bit
 
 Hi,
 
 sos@ was so kind and provided me a patch which makes smartmontools working
 again on FreeBSD 6. I changed the patch a bit so os_freebsd.c would also
 work on earlier FreeBSD versions like it does now. Please aprove the
 commit.
 
  Greetings
 
 -- 
  Oliver Lehmann
   http://www.pofo.de/
   http://wishlist.ans-netz.de/
 
 --Multipart=_Mon__23_May_2005_16_38_08_+0200_X32DAzuq8LgvxqHn
 Content-Type: application/octet-stream;
  name="smartmontools-patch"
 Content-Disposition: attachment;
  filename="smartmontools-patch"
 Content-Transfer-Encoding: base64
 
 LS0tIG9zX2ZyZWVic2QuYy5vcmlnCVN1biBTZXAgIDUgMDk6MTY6MDcgMjAwNAorKysgb3NfZnJl
 ZWJzZC5jCUZyaSBNYXkgMjAgMTI6NDI6MzYgMjAwNQpAQCAtMTgsNiArMTgsNyBAQAogI2luY2x1
 ZGUgPHN0ZGlvLmg+CiAjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CiAjaW5jbHVkZSA8ZGlyZW50Lmg+
 CisjaW5jbHVkZSA8ZmNudGwuaD4KICNpbmNsdWRlIDxlcnIuaD4KICNpbmNsdWRlIDxjYW1saWIu
 aD4KICNpbmNsdWRlIDxjYW0vc2NzaS9zY3NpX21lc3NhZ2UuaD4KQEAgLTEwOSw3ICsxMTAsNyBA
 QAogICB9CiAKICAgaWYgKHBhcnNlX29rID09IENPTlRST0xMRVJfQVRBKSB7Ci0gICAgaWYgKChm
 ZGNoYW4tPmF0YWNvbW1hbmQgPSBvcGVuKCIvZGV2L2F0YSIsT19SRFdSKSk8MCkgeworICAgIGlm
 ICgoZmRjaGFuLT5hdGFkZXZpY2UgPSBvcGVuKGRldixPX1JET05MWSkpPDApIHsKICAgICAgIGlu
 dCBteWVycm9yID0gZXJybm87ICAgICAgLy9wcmVzZXJ2ZSBhY3Jvc3MgZnJlZSBjYWxsCiAgICAg
 ICBmcmVlIChmZGNoYW4pOwogICAgICAgZXJybm8gPSBteWVycm9yOwpAQCAtMTIwLDcgKzEyMSw3
 IEBACiAgIGlmIChwYXJzZV9vayA9PSBDT05UUk9MTEVSXzNXQVJFXzY3OEtfQ0hBUikgewogICAg
 IGNoYXIgYnVmWzUxMl07CiAgICAgc3ByaW50ZihidWYsIi9kZXYvdHdlJWQiLGZkY2hhbi0+ZGV2
 aWNlKTsKLSAgICBpZiAoKGZkY2hhbi0+YXRhY29tbWFuZCA9IG9wZW4oYnVmLE9fUkRXUikpPDAp
 IHsKKyAgICBpZiAoKGZkY2hhbi0+YXRhZGV2aWNlID0gb3BlbihidWYsT19SRFdSKSk8MCkgewog
 ICAgICAgaW50IG15ZXJyb3IgPSBlcnJubzsgLy8gcHJlc2VydmVyIGFjcm9zcyBmcmVlIGNhbGwK
 ICAgICAgIGZyZWUoZmRjaGFuKTsKICAgICAgIGVycm5vPW15ZXJyb3I7CkBAIC0xNjcsOCArMTY4
 LDggQEAKICAgICBmcmVlKGZkY2hhbi0+ZGV2bmFtZSk7CiAgIAogICAvLyBjbG9zZSBkZXZpY2Us
 IGlmIG9wZW4KLSAgaWYgKGZkY2hhbi0+YXRhY29tbWFuZCkKLSAgICBmYWlsZWQ9Y2xvc2UoZmRj
 aGFuLT5hdGFjb21tYW5kKTsKKyAgaWYgKGZkY2hhbi0+YXRhZGV2aWNlKQorICAgIGZhaWxlZD1j
 bG9zZShmZGNoYW4tPmF0YWRldmljZSk7CiAKICAgaWYgKGZkY2hhbi0+c2NzaWNvbnRyb2wpCiAg
 ICAgZmFpbGVkPWNsb3NlKGZkY2hhbi0+c2NzaWNvbnRyb2wpOwpAQCAtMjIxLDcgKzIyMiw3IEBA
 CiB9CiAKIGludCBhdGFfY29tbWFuZF9pbnRlcmZhY2UoaW50IGZkLCBzbWFydF9jb21tYW5kX3Nl
 dCBjb21tYW5kLCBpbnQgc2VsZWN0LCBjaGFyICpkYXRhKSB7Ci0jaWZuZGVmIEFUQVJFUVVFU1QK
 KyNpZm5kZWYgSU9DQVRBUkVRVUVTVAogICAvLyBzb3JyeSwgYnV0IHdpdGhvdXQgQVRBbmcsIHdl
 IGNhbid0IGRvIGFueXRoaW5nIGhlcmUKICAgcHJpbnR3YXJuaW5nKEJBRF9LRVJORUwsTlVMTCk7
 CiAgIGVycm5vID0gRU5PU1lTOwpAQCAtMjI5LDcgKzIzMCw3IEBACiAjZWxzZQogICBzdHJ1Y3Qg
 ZnJlZWJzZF9kZXZfY2hhbm5lbCogY29uOwogICBpbnQgcmV0dmFsLCBjb3B5ZGF0YT0wOwotICBz
 dHJ1Y3QgYXRhX2NtZCBpb2NtZDsKKyAgc3RydWN0IGF0YV9pb2NfcmVxdWVzdCByZXF1ZXN0Owog
 ICB1bnNpZ25lZCBjaGFyIGJ1ZmZbNTEyXTsKIAogICAvLyBjaGVjayB0aGF0ICJmaWxlIGRlc2Ny
 aXB0b3IiIGlzIHZhbGlkCkBAIC0yMzgsODkgKzIzOSw4NiBAQAogCiAgIGJ6ZXJvKGJ1ZmYsNTEy
 KTsKIAotICBiemVybygmaW9jbWQsc2l6ZW9mKHN0cnVjdCBhdGFfY21kKSk7CisgIGJ6ZXJvKCZy
 ZXF1ZXN0LHNpemVvZihzdHJ1Y3QgYXRhX2lvY19yZXF1ZXN0KSk7CiAgIGJ6ZXJvKGJ1ZmYsNTEy
 KTsKLSAgaW9jbWQuY21kPUFUQVJFUVVFU1Q7Ci0gIGlvY21kLmNoYW5uZWw9Y29uLT5jaGFubmVs
 OwotICBpb2NtZC5kZXZpY2U9Y29uLT5kZXZpY2U7CiAKLSAgaW9jbWQudS5yZXF1ZXN0LnUuYXRh
 LmNvbW1hbmQ9QVRBX1NNQVJUX0NNRDsKLSAgaW9jbWQudS5yZXF1ZXN0LnRpbWVvdXQ9NjAwOwor
 ICByZXF1ZXN0LnUuYXRhLmNvbW1hbmQ9QVRBX1NNQVJUX0NNRDsKKyAgcmVxdWVzdC50aW1lb3V0
 PTYwMDsKICAgc3dpdGNoIChjb21tYW5kKXsKICAgY2FzZSBSRUFEX1ZBTFVFUzoKLSAgICBpb2Nt
 ZC51LnJlcXVlc3QudS5hdGEuZmVhdHVyZT1BVEFfU01BUlRfUkVBRF9WQUxVRVM7Ci0gICAgaW9j
 bWQudS5yZXF1ZXN0LnUuYXRhLmxiYT0weGMyNGY8PDg7Ci0gICAgaW9jbWQudS5yZXF1ZXN0LmZs
 YWdzPUFUQV9DTURfUkVBRDsKLSAgICBpb2NtZC51LnJlcXVlc3QuZGF0YT1idWZmOwotICAgIGlv
 Y21kLnUucmVxdWVzdC5jb3VudD01MTI7CisgICAgcmVxdWVzdC51LmF0YS5mZWF0dXJlPUFUQV9T
 TUFSVF9SRUFEX1ZBTFVFUzsKKyAgICByZXF1ZXN0LnUuYXRhLmxiYT0weGMyNGY8PDg7CisgICAg
 cmVxdWVzdC5mbGFncz1BVEFfQ01EX1JFQUQ7CisgICAgcmVxdWVzdC5kYXRhPWJ1ZmY7CisgICAg
 cmVxdWVzdC5jb3VudD01MTI7CiAgICAgY29weWRhdGE9MTsKICAgICBicmVhazsKICAgY2FzZSBS
 RUFEX1RIUkVTSE9MRFM6Ci0gICAgaW9jbWQudS5yZXF1ZXN0LnUuYXRhLmZlYXR1cmU9QVRBX1NN
 QVJUX1JFQURfVEhSRVNIT0xEUzsKLSAgICBpb2NtZC51LnJlcXVlc3QudS5hdGEuY291bnQ9MTsK
 LSAgICBpb2NtZC51LnJlcXVlc3QudS5hdGEubGJhPTF8KDB4YzI0Zjw8OCk7Ci0gICAgaW9jbWQu
 dS5yZXF1ZXN0LmZsYWdzPUFUQV9DTURfUkVBRDsKLSAgICBpb2NtZC51LnJlcXVlc3QuZGF0YT1i
 dWZmOwotICAgIGlvY21kLnUucmVxdWVzdC5jb3VudD01MTI7CisgICAgcmVxdWVzdC51LmF0YS5m
 ZWF0dXJlPUFUQV9TTUFSVF9SRUFEX1RIUkVTSE9MRFM7CisgICAgcmVxdWVzdC51LmF0YS5jb3Vu
 dD0xOworICAgIHJlcXVlc3QudS5hdGEubGJhPTF8KDB4YzI0Zjw8OCk7CisgICAgcmVxdWVzdC5m
 bGFncz1BVEFfQ01EX1JFQUQ7CisgICAgcmVxdWVzdC5kYXRhPWJ1ZmY7CisgICAgcmVxdWVzdC5j
 b3VudD01MTI7CiAgICAgY29weWRhdGE9MTsKICAgICBicmVhazsKICAgY2FzZSBSRUFEX0xPRzoK
 LSAgICBpb2NtZC51LnJlcXVlc3QudS5hdGEuZmVhdHVyZT1BVEFfU01BUlRfUkVBRF9MT0dfU0VD
 VE9SOwotICAgIGlvY21kLnUucmVxdWVzdC51LmF0YS5sYmE9c2VsZWN0fCgweGMyNGY8PDgpOwot
 ICAgIGlvY21kLnUucmVxdWVzdC51LmF0YS5jb3VudD0xOwotICAgIGlvY21kLnUucmVxdWVzdC5m
 bGFncz1BVEFfQ01EX1JFQUQ7Ci0gICAgaW9jbWQudS5yZXF1ZXN0LmRhdGE9YnVmZjsKLSAgICBp
 b2NtZC51LnJlcXVlc3QuY291bnQ9NTEyOworICAgIHJlcXVlc3QudS5hdGEuZmVhdHVyZT1BVEFf
 U01BUlRfUkVBRF9MT0dfU0VDVE9SOworICAgIHJlcXVlc3QudS5hdGEubGJhPXNlbGVjdHwoMHhj
 MjRmPDw4KTsKKyAgICByZXF1ZXN0LnUuYXRhLmNvdW50PTE7CisgICAgcmVxdWVzdC5mbGFncz1B
 VEFfQ01EX1JFQUQ7CisgICAgcmVxdWVzdC5kYXRhPWJ1ZmY7CisgICAgcmVxdWVzdC5jb3VudD01
 MTI7CiAgICAgY29weWRhdGE9MTsKICAgICBicmVhazsKICAgY2FzZSBJREVOVElGWToKLSAgICBp
 b2NtZC51LnJlcXVlc3QudS5hdGEuY29tbWFuZD1BVEFfSURFTlRJRllfREVWSUNFOwotICAgIGlv
 Y21kLnUucmVxdWVzdC5mbGFncz1BVEFfQ01EX1JFQUQ7Ci0gICAgaW9jbWQudS5yZXF1ZXN0LmRh
 dGE9YnVmZjsKLSAgICBpb2NtZC51LnJlcXVlc3QuY291bnQ9NTEyOworICAgIHJlcXVlc3QudS5h
 dGEuY29tbWFuZD1BVEFfSURFTlRJRllfREVWSUNFOworICAgIHJlcXVlc3QuZmxhZ3M9QVRBX0NN
 RF9SRUFEOworICAgIHJlcXVlc3QuZGF0YT1idWZmOworICAgIHJlcXVlc3QuY291bnQ9NTEyOwog
 ICAgIGNvcHlkYXRhPTE7CiAgICAgYnJlYWs7CiAgIGNhc2UgUElERU5USUZZOgotICAgIGlvY21k
 LnUucmVxdWVzdC51LmF0YS5jb21tYW5kPUFUQV9JREVOVElGWV9QQUNLRVRfREVWSUNFOwotICAg
 IGlvY21kLnUucmVxdWVzdC5mbGFncz1BVEFfQ01EX1JFQUQ7Ci0gICAgaW9jbWQudS5yZXF1ZXN0
 LmRhdGE9YnVmZjsKLSAgICBpb2NtZC51LnJlcXVlc3QuY291bnQ9NTEyOworICAgIHJlcXVlc3Qu
 dS5hdGEuY29tbWFuZD1BVEFfSURFTlRJRllfUEFDS0VUX0RFVklDRTsKKyAgICByZXF1ZXN0LmZs
 YWdzPUFUQV9DTURfUkVBRDsKKyAgICByZXF1ZXN0LmRhdGE9YnVmZjsKKyAgICByZXF1ZXN0LmNv
 dW50PTUxMjsKICAgICBjb3B5ZGF0YT0xOwogICAgIGJyZWFrOwogICBjYXNlIEVOQUJMRToKLSAg
 ICBpb2NtZC51LnJlcXVlc3QudS5hdGEuZmVhdHVyZT1BVEFfU01BUlRfRU5BQkxFOwotICAgIGlv
 Y21kLnUucmVxdWVzdC51LmF0YS5sYmE9MHhjMjRmPDw4OwotICAgIGlvY21kLnUucmVxdWVzdC5m
 bGFncz1BVEFfQ01EX0NPTlRST0w7CisgICAgcmVxdWVzdC51LmF0YS5mZWF0dXJlPUFUQV9TTUFS
 VF9FTkFCTEU7CisgICAgcmVxdWVzdC51LmF0YS5sYmE9MHhjMjRmPDw4OworICAgIHJlcXVlc3Qu
 ZmxhZ3M9QVRBX0NNRF9DT05UUk9MOwogICAgIGJyZWFrOwogICBjYXNlIERJU0FCTEU6Ci0gICAg
 aW9jbWQudS5yZXF1ZXN0LnUuYXRhLmZlYXR1cmU9QVRBX1NNQVJUX0RJU0FCTEU7Ci0gICAgaW9j
 bWQudS5yZXF1ZXN0LnUuYXRhLmxiYT0weGMyNGY8PDg7Ci0gICAgaW9jbWQudS5yZXF1ZXN0LmZs
 YWdzPUFUQV9DTURfQ09OVFJPTDsKKyAgICByZXF1ZXN0LnUuYXRhLmZlYXR1cmU9QVRBX1NNQVJU
 X0RJU0FCTEU7CisgICAgcmVxdWVzdC51LmF0YS5sYmE9MHhjMjRmPDw4OworICAgIHJlcXVlc3Qu
 ZmxhZ3M9QVRBX0NNRF9DT05UUk9MOwogICAgIGJyZWFrOwogICBjYXNlIEFVVE9fT0ZGTElORToK
 ICAgICAvLyBOT1RFOiBBY2NvcmRpbmcgdG8gQVRBUEkgNCBhbmQgVVAsIHRoaXMgY29tbWFuZCBp
 cyBvYnNvbGV0ZQotICAgIGlvY21kLnUucmVxdWVzdC51LmF0YS5mZWF0dXJlPUFUQV9TTUFSVF9B
 VVRPX09GRkxJTkU7Ci0gICAgaW9jbWQudS5yZXF1ZXN0LnUuYXRhLmxiYT1zZWxlY3R8KDB4YzI0
 Zjw8OCk7Ci0gICAgaW9jbWQudS5yZXF1ZXN0LmZsYWdzPUFUQV9DTURfQ09OVFJPTDsKKyAgICBy
 ZXF1ZXN0LnUuYXRhLmZlYXR1cmU9QVRBX1NNQVJUX0FVVE9fT0ZGTElORTsKKyAgICByZXF1ZXN0
 LnUuYXRhLmxiYT1zZWxlY3R8KDB4YzI0Zjw8OCk7CisgICAgcmVxdWVzdC5mbGFncz1BVEFfQ01E
 X0NPTlRST0w7CiAgICAgYnJlYWs7CiAgIGNhc2UgQVVUT1NBVkU6Ci0gICAgaW9jbWQudS5yZXF1
 ZXN0LnUuYXRhLmZlYXR1cmU9QVRBX1NNQVJUX0FVVE9TQVZFOwotICAgIGlvY21kLnUucmVxdWVz
 dC51LmF0YS5jb3VudD0weGYxOyAgLy8gdG8gZW5hYmxlIGF1dG9zYXZlCi0gICAgaW9jbWQudS5y
 ZXF1ZXN0LnUuYXRhLmxiYT0weGMyNGY8PDg7Ci0gICAgaW9jbWQudS5yZXF1ZXN0LmZsYWdzPUFU
 QV9DTURfQ09OVFJPTDsKKyAgICByZXF1ZXN0LnUuYXRhLmZlYXR1cmU9QVRBX1NNQVJUX0FVVE9T
 QVZFOworICAgIHJlcXVlc3QudS5hdGEuY291bnQ9MHhmMTsgIC8vIHRvIGVuYWJsZSBhdXRvc2F2
 ZQorICAgIHJlcXVlc3QudS5hdGEubGJhPTB4YzI0Zjw8ODsKKyAgICByZXF1ZXN0LmZsYWdzPUFU
 QV9DTURfQ09OVFJPTDsKICAgICBicmVhazsKICAgY2FzZSBJTU1FRElBVEVfT0ZGTElORToKLSAg
 ICBpb2NtZC51LnJlcXVlc3QudS5hdGEuZmVhdHVyZT1BVEFfU01BUlRfSU1NRURJQVRFX09GRkxJ
 TkU7Ci0gICAgaW9jbWQudS5yZXF1ZXN0LnUuYXRhLmxiYSA9IHNlbGVjdHwoMHhjMjRmPDw4KTsg
 Ly8gcHV0IHRlc3QgaW4gc2VjdG9yCi0gICAgaW9jbWQudS5yZXF1ZXN0LmZsYWdzPUFUQV9DTURf
 Q09OVFJPTDsKKyAgICByZXF1ZXN0LnUuYXRhLmZlYXR1cmU9QVRBX1NNQVJUX0lNTUVESUFURV9P
 RkZMSU5FOworICAgIHJlcXVlc3QudS5hdGEubGJhID0gc2VsZWN0fCgweGMyNGY8PDgpOyAvLyBw
 dXQgdGVzdCBpbiBzZWN0b3IKKyAgICByZXF1ZXN0LmZsYWdzPUFUQV9DTURfQ09OVFJPTDsKICAg
 ICBicmVhazsKICAgY2FzZSBTVEFUVVNfQ0hFQ0s6IC8vIHNhbWUgY29tbWFuZCwgbm8gSERJTyBp
 biBGcmVlQlNECiAgIGNhc2UgU1RBVFVTOgogICAgIC8vIHRoaXMgY29tbWFuZCBvbmx5IHNheXMg
 aWYgU01BUlQgaXMgd29ya2luZy4gIEl0IGNvdWxkIGJlCiAgICAgLy8gcmVwbGFjZWQgd2l0aCBT
 VEFUVVNfQ0hFQ0sgYmVsb3cuCi0gICAgaW9jbWQudS5yZXF1ZXN0LnUuYXRhLmZlYXR1cmU9QVRB
 X1NNQVJUX1NUQVRVUzsKLSAgICBpb2NtZC51LnJlcXVlc3QudS5hdGEubGJhPTB4YzI0Zjw8ODsK
 LSAgICBpb2NtZC51LnJlcXVlc3QuZmxhZ3M9QVRBX0NNRF9DT05UUk9MOworICAgIHJlcXVlc3Qu
 dS5hdGEuZmVhdHVyZT1BVEFfU01BUlRfU1RBVFVTOworICAgIHJlcXVlc3QudS5hdGEubGJhPTB4
 YzI0Zjw8ODsKKyAgICByZXF1ZXN0LmZsYWdzPUFUQV9DTURfQ09OVFJPTDsKICAgICBicmVhazsK
 ICAgZGVmYXVsdDoKICAgICBwb3V0KCJVbnJlY29nbml6ZWQgY29tbWFuZCAlZCBpbiBhdGFfY29t
 bWFuZF9pbnRlcmZhY2UoKVxuIgpAQCAtMzM0LDE1ICszMzIsMTUgQEAKICAgICB1bnNpZ25lZCBj
 b25zdCBjaGFyIGZhaWxlZF9sbz0weGY0LCBmYWlsZWRfaGk9MHgyYzsKICAgICB1bnNpZ25lZCBj
 aGFyIGxvdyxoaWdoOwogICAgIAotICAgIGlmICgocmV0dmFsPWlvY3RsKGNvbi0+YXRhY29tbWFu
 ZCwgSU9DQVRBLCAmaW9jbWQpKSkKKyAgICBpZiAoKHJldHZhbD1pb2N0bChjb24tPmF0YWRldmlj
 ZSwgSU9DQVRBUkVRVUVTVCwgJnJlcXVlc3QpKSkKICAgICAgIHJldHVybiAtMTsKIAogI2lmIF9f
 RnJlZUJTRF92ZXJzaW9uIDwgNTAyMDAwCiAgICAgcHJpbnR3YXJuaW5nKE5PX1JFVFVSTixOVUxM
 KTsKICNlbmRpZgogCi0gICAgaGlnaCA9IChpb2NtZC51LnJlcXVlc3QudS5hdGEubGJhID4+IDE2
 KSAmIDB4ZmY7Ci0gICAgbG93ID0gKGlvY21kLnUucmVxdWVzdC51LmF0YS5sYmEgPj4gOCkgJiAw
 eGZmOworICAgIGhpZ2ggPSAocmVxdWVzdC51LmF0YS5sYmEgPj4gMTYpICYgMHhmZjsKKyAgICBs
 b3cgPSAocmVxdWVzdC51LmF0YS5sYmEgPj4gOCkgJiAweGZmOwogICAgIAogICAgIC8vIEN5bCBs
 b3cgYW5kIEN5bCBoaWdoIHVuY2hhbmdlZCBtZWFucyAiR29vZCBTTUFSVCBzdGF0dXMiCiAgICAg
 aWYgKGxvdz09bm9ybWFsX2xvICYmIGhpZ2g9PW5vcm1hbF9oaSkKQEAgLTM1NSwxOCArMzUzLDE4
 IEBACiAgICAgLy8gV2UgaGF2ZW4ndCBnb3R0ZW4gb3V0cHV0IHRoYXQgbWFrZXMgc2Vuc2U7IHBy
 aW50IG91dCBzb21lIGRlYnVnZ2luZyBpbmZvCiAgICAgY2hhciBidWZbNTEyXTsKICAgICBzcHJp
 bnRmKGJ1ZiwiQ01EPTB4JTAyeFxuRlIgPTB4JTAyeFxuTlMgPTB4JTAyeFxuU0MgPTB4JTAyeFxu
 Q0wgPTB4JTAyeFxuQ0ggPTB4JTAyeFxuUkVUVVJOID0weCUwNHhcbiIsCi0gICAgICAgICAgICAo
 aW50KWlvY21kLnUucmVxdWVzdC51LmF0YS5jb21tYW5kLAotICAgICAgICAgICAgKGludClpb2Nt
 ZC51LnJlcXVlc3QudS5hdGEuZmVhdHVyZSwKLSAgICAgICAgICAgIChpbnQpaW9jbWQudS5yZXF1
 ZXN0LnUuYXRhLmNvdW50LAotICAgICAgICAgICAgKGludCkoKGlvY21kLnUucmVxdWVzdC51LmF0
 YS5sYmEpICYgMHhmZiksCi0gICAgICAgICAgICAoaW50KSgoaW9jbWQudS5yZXF1ZXN0LnUuYXRh
 LmxiYT4+OCkgJiAweGZmKSwKLSAgICAgICAgICAgIChpbnQpKChpb2NtZC51LnJlcXVlc3QudS5h
 dGEubGJhPj4xNikgJiAweGZmKSwKLSAgICAgICAgICAgIChpbnQpaW9jbWQudS5yZXF1ZXN0LmVy
 cm9yKTsKKyAgICAgICAgICAgIChpbnQpcmVxdWVzdC51LmF0YS5jb21tYW5kLAorICAgICAgICAg
 ICAgKGludClyZXF1ZXN0LnUuYXRhLmZlYXR1cmUsCisgICAgICAgICAgICAoaW50KXJlcXVlc3Qu
 dS5hdGEuY291bnQsCisgICAgICAgICAgICAoaW50KSgocmVxdWVzdC51LmF0YS5sYmEpICYgMHhm
 ZiksCisgICAgICAgICAgICAoaW50KSgocmVxdWVzdC51LmF0YS5sYmE+PjgpICYgMHhmZiksCisg
 ICAgICAgICAgICAoaW50KSgocmVxdWVzdC51LmF0YS5sYmE+PjE2KSAmIDB4ZmYpLAorICAgICAg
 ICAgICAgKGludClyZXF1ZXN0LmVycm9yKTsKICAgICBwcmludHdhcm5pbmcoQkFEX1NNQVJULGJ1
 Zik7CiAgICAgcmV0dXJuIDA7ICAgCiAgIH0KIAotICBpZiAoKHJldHZhbD1pb2N0bChjb24tPmF0
 YWNvbW1hbmQsIElPQ0FUQSwgJmlvY21kKSkpIHsKKyAgaWYgKChyZXR2YWw9aW9jdGwoY29uLT5h
 dGFkZXZpY2UsIElPQ0FUQVJFUVVFU1QsICZyZXF1ZXN0KSkpIHsKICAgICBwZXJyb3IoIkZhaWxl
 ZCBjb21tYW5kOiAiKTsKICAgICByZXR1cm4gLTE7CiAgIH0KQEAgLTYzNyw3ICs2MzUsNyBAQAog
 ICB9CiAKICAgLy8gTm93IHNlbmQgdGhlIGNvbW1hbmQgZG93biB0aHJvdWdoIGFuIGlvY3RsKCkK
 LSAgaW9jdGxyZXR1cm49aW9jdGwoY29uLT5hdGFjb21tYW5kLFRXRUlPX0NPTU1BTkQsY21kKTsK
 KyAgaW9jdGxyZXR1cm49aW9jdGwoY29uLT5hdGFkZXZpY2UsVFdFSU9fQ09NTUFORCxjbWQpOwog
 ICAKICAgLy8gRGVhbCB3aXRoIHRoZSBkaWZmZXJlbnQgZXJyb3IgY2FzZXMKICAgaWYgKGlvY3Rs
 cmV0dXJuKSB7CkBAIC03MDksNTUgKzcwNyw2IEBACiAgIHJldHVybiAwOwogfQogCi1zdGF0aWMg
 aW50IGdldF9hdGFfY2hhbm5lbF91bml0ICggY29uc3QgY2hhciogbmFtZSwgaW50KiB1bml0LCBp
 bnQqIGRldikgewotI2lmbmRlZiBBVEFSRVFVRVNUCi0gICpkZXY9MDsKLSAgKnVuaXQ9MDsKLXJl
 dHVybiAwOwotI2Vsc2UKLSAgLy8gdGhlcmUgaXMgbm8gZGlyZWN0IGNvcnJlbGF0aW9uIGJldHdl
 ZW4gbmFtZSAnYWQwLCBhZDEsIC4uLicgYW5kCi0gIC8vIGNoYW5uZWwvdW5pdCBudW1iZXIuICBT
 byB3ZSBuZWVkIHRvIGl0ZXJhdGUgdGhyb3VnaCB0aGUgcG9zc2libGUKLSAgLy8gY2hhbm5lbHMg
 YW5kIGNoZWNrIGVhY2ggdW5pdCB0byBzZWUgaWYgd2UgbWF0Y2ggbmFtZXMKLSAgc3RydWN0IGF0
 YV9jbWQgaW9jbWQ7Ci0gIGludCBmZCxtYXh1bml0OwotICAKLSAgYnplcm8oJmlvY21kLCBzaXpl
 b2Yoc3RydWN0IGF0YV9jbWQpKTsKLQotICBpZiAoKGZkID0gb3BlbigiL2Rldi9hdGEiLCBPX1JE
 V1IpKSA8IDApCi0gICAgcmV0dXJuIC1lcnJubzsKLSAgCi0gIGlvY21kLmNtZCA9IEFUQUdNQVhD
 SEFOTkVMOwotICBpZiAoaW9jdGwoZmQsIElPQ0FUQSwgJmlvY21kKSA8IDApIHsKLSAgICByZXR1
 cm4gLWVycm5vOwotICAgIGNsb3NlKGZkKTsKLSAgfQotICBtYXh1bml0ID0gaW9jbWQudS5tYXhj
 aGFuOwotICBmb3IgKCp1bml0ID0gMDsgKnVuaXQgPCBtYXh1bml0OyAoKnVuaXQpKyspIHsKLSAg
 ICBpb2NtZC5jaGFubmVsID0gKnVuaXQ7Ci0gICAgaW9jbWQuZGV2aWNlID0gLTE7Ci0gICAgaW9j
 bWQuY21kID0gQVRBR1BBUk07Ci0gICAgaWYgKGlvY3RsKGZkLCBJT0NBVEEsICZpb2NtZCkgPCAw
 KSB7Ci0gICAgICBjbG9zZShmZCk7Ci0gICAgICByZXR1cm4gLWVycm5vOwotICAgIH0KLSAgICBp
 ZiAoaW9jbWQudS5wYXJhbS50eXBlWzBdICYmICFzdHJjbXAobmFtZSxpb2NtZC51LnBhcmFtLm5h
 bWVbMF0pKSB7Ci0gICAgICAqZGV2ID0gMDsKLSAgICAgIGJyZWFrOwotICAgIH0KLSAgICBpZiAo
 aW9jbWQudS5wYXJhbS50eXBlWzFdICYmICFzdHJjbXAobmFtZSxpb2NtZC51LnBhcmFtLm5hbWVb
 MV0pKSB7Ci0gICAgICAqZGV2ID0gMTsKLSAgICAgIGJyZWFrOwotICAgIH0KLSAgfQotICBjbG9z
 ZShmZCk7Ci0gIGlmICgqdW5pdCA9PSBtYXh1bml0KQotICAgIHJldHVybiAtMTsKLSAgZWxzZQot
 ICAgIHJldHVybiAwOwotI2VuZGlmCi19Ci0KLQogLy8gR3Vlc3MgZGV2aWNlIHR5cGUgKGF0YSBv
 ciBzY3NpKSBiYXNlZCBvbiBkZXZpY2UgbmFtZSAoRnJlZUJTRAogLy8gc3BlY2lmaWMpIFNDU0kg
 ZGV2aWNlIG5hbWUgaW4gRnJlZUJTRCBjYW4gYmUgc2QsIHNyLCBzY2QsIHN0LCBuc3QsCiAvLyBv
 c3N0LCBub3NzdCBhbmQgc2cuCkBAIC03ODgsMTEgKzczNyw2IEBACiAgIC8vIGZvcm0gL2Rldi9h
 ZCogb3IgYWQqCiAgIGlmICghc3RybmNtcChmYnNkX2Rldl9hdGFfZGlza19wcmVmaXgsIGRldl9u
 YW1lLAogICAgICAgICAgICAgICAgc3RybGVuKGZic2RfZGV2X2F0YV9kaXNrX3ByZWZpeCkpKSB7
 Ci0gICAgaWYgKGNoYW4gIT0gTlVMTCkgewotICAgICAgaWYgKGdldF9hdGFfY2hhbm5lbF91bml0
 KGRldl9uYW1lLCYoY2hhbi0+Y2hhbm5lbCksJihjaGFuLT5kZXZpY2UpKTwwKSB7Ci0gICAgICAg
 IHJldHVybiBDT05UUk9MTEVSX1VOS05PV047Ci0gICAgICB9Ci0gICAgfQogICAgIHJldHVybiBD
 T05UUk9MTEVSX0FUQTsKICAgfQogICAKCg==
 
 --Multipart=_Mon__23_May_2005_16_38_08_+0200_X32DAzuq8LgvxqHn--
State-Changed-From-To: open->feedback 
State-Changed-By: oliver 
State-Changed-When: Mon May 23 15:03:32 GMT 2005 
State-Changed-Why:  
awaiting maintainers approval - timout is 2005-06-06 

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

From: Oliver Lehmann <lehmann@ans-netz.de>
To: bug-followup@FreeBSD.org
Cc: sos@FreeBSD.org, martines@rochester.rr.com
Subject: Re: ports/81403: smartmontools is malfunctioning on FreeBSD >
 600027
Date: Mon, 23 May 2005 18:53:39 +0200

 This is a multi-part message in MIME format.
 
 --Multipart=_Mon__23_May_2005_18_53_39_+0200_CXCtUQkhcsF5RiC+
 Content-Type: text/plain; charset=US-ASCII
 Content-Transfer-Encoding: 7bit
 
 I included the wrong (original) patch. Please find the correct one
 attached
 
 -- 
  Oliver Lehmann
   http://www.pofo.de/
   http://wishlist.ans-netz.de/
 
 --Multipart=_Mon__23_May_2005_18_53_39_+0200_CXCtUQkhcsF5RiC+
 Content-Type: application/octet-stream;
  name="patch-smartmontools"
 Content-Disposition: attachment;
  filename="patch-smartmontools"
 Content-Transfer-Encoding: quoted-printable
 
 Index: Makefile
 =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
 =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
 =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
 RCS file: /usr/local/cvsroot/ports/sysutils/smartmontools/Makefile,v
 retrieving revision 1.16
 diff -u -r1.16 Makefile
 --- Makefile	9 May 2005 10:00:14 -0000	1.16
 +++ Makefile	23 May 2005 14:34:05 -0000
 @@ -7,7 +7,7 @@
 =20
  PORTNAME=3D	smartmontools
  PORTVERSION=3D	5.33
 -PORTREVISION=3D	0
 +PORTREVISION=3D	1
  CATEGORIES=3D	sysutils
  MASTER_SITES=3D	${MASTER_SITE_SOURCEFORGE}
  MASTER_SITE_SUBDIR=3D	${PORTNAME}
 Index: files/patch-os_freebsd.c
 =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
 =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
 =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
 RCS file: /usr/local/cvsroot/ports/sysutils/smartmontools/files/patch-os_fr=
 eebsd.c,v
 retrieving revision 1.3
 diff -u -r1.3 patch-os_freebsd.c
 --- files/patch-os_freebsd.c	15 Jul 2004 14:45:21 -0000	1.3
 +++ files/patch-os_freebsd.c	23 May 2005 14:34:05 -0000
 @@ -1,5 +1,5 @@
 ---- os_freebsd.c.orig	Sat Mar 13 11:32:52 2004
 -+++ os_freebsd.c	Thu Jul 15 23:42:06 2004
 +--- os_freebsd.c.orig	Sun Sep  5 09:16:07 2004
 ++++ os_freebsd.c	Mon May 23 16:31:19 2005
  @@ -18,6 +18,7 @@
   #include <stdio.h>
   #include <sys/types.h>
 @@ -8,3 +8,341 @@
   #include <err.h>
   #include <camlib.h>
   #include <cam/scsi/scsi_message.h>
 +@@ -109,7 +110,11 @@
 +   }
 +=20
 +   if (parse_ok =3D=3D CONTROLLER_ATA) {
 ++#ifdef IOCATAREQUEST
 ++    if ((fdchan->device =3D open(dev,O_RDONLY))<0) {
 ++#else
 +     if ((fdchan->atacommand =3D open("/dev/ata",O_RDWR))<0) {
 ++#endif
 +       int myerror =3D errno;      //preserve across free call
 +       free (fdchan);
 +       errno =3D myerror;
 +@@ -120,7 +125,11 @@
 +   if (parse_ok =3D=3D CONTROLLER_3WARE_678K_CHAR) {
 +     char buf[512];
 +     sprintf(buf,"/dev/twe%d",fdchan->device);
 ++#ifdef IOCATAREQUEST
 ++    if ((fdchan->device =3D open(buf,O_RDWR))<0) {
 ++#else
 +     if ((fdchan->atacommand =3D open(buf,O_RDWR))<0) {
 ++#endif
 +       int myerror =3D errno; // preserver across free call
 +       free(fdchan);
 +       errno=3Dmyerror;
 +@@ -167,8 +176,13 @@
 +     free(fdchan->devname);
 +  =20
 +   // close device, if open
 ++#ifdef IOCATAREQUEST
 ++  if (fdchan->device)
 ++    failed=3Dclose(fdchan->device);
 ++#else
 +   if (fdchan->atacommand)
 +     failed=3Dclose(fdchan->atacommand);
 ++#endif
 +=20
 +   if (fdchan->scsicontrol)
 +     failed=3Dclose(fdchan->scsicontrol);
 +@@ -221,7 +235,7 @@
 + }
 +=20
 + int ata_command_interface(int fd, smart_command_set command, int select, =
 char *data) {
 +-#ifndef ATAREQUEST
 ++#if !defined(ATAREQUEST) && !defined(IOCATAREQUEST)
 +   // sorry, but without ATAng, we can't do anything here
 +   printwarning(BAD_KERNEL,NULL);
 +   errno =3D ENOSYS;
 +@@ -229,7 +243,11 @@
 + #else
 +   struct freebsd_dev_channel* con;
 +   int retval, copydata=3D0;
 ++#ifdef IOCATAREQUEST
 ++  struct ata_ioc_request request;
 ++#else
 +   struct ata_cmd iocmd;
 ++#endif
 +   unsigned char buff[512];
 +=20
 +   // check that "file descriptor" is valid
 +@@ -238,89 +256,176 @@
 +=20
 +   bzero(buff,512);
 +=20
 ++#ifdef IOCATAREQUEST
 ++  bzero(&request,sizeof(struct ata_ioc_request));
 ++#else
 +   bzero(&iocmd,sizeof(struct ata_cmd));
 ++#endif
 +   bzero(buff,512);
 ++
 ++#ifdef IOCATAREQUEST
 ++  request.u.ata.command=3DATA_SMART_CMD;
 ++  request.timeout=3D600;
 ++#else
 +   iocmd.cmd=3DATAREQUEST;
 +   iocmd.channel=3Dcon->channel;
 +   iocmd.device=3Dcon->device;
 +=20
 +   iocmd.u.request.u.ata.command=3DATA_SMART_CMD;
 +   iocmd.u.request.timeout=3D600;
 ++#endif
 +   switch (command){
 +   case READ_VALUES:
 ++#ifdef IOCATAREQUEST
 ++    request.u.ata.feature=3DATA_SMART_READ_VALUES;
 ++    request.u.ata.lba=3D0xc24f<<8;
 ++    request.flags=3DATA_CMD_READ;
 ++    request.data=3Dbuff;
 ++    request.count=3D512;
 ++#else
 +     iocmd.u.request.u.ata.feature=3DATA_SMART_READ_VALUES;
 +     iocmd.u.request.u.ata.lba=3D0xc24f<<8;
 +     iocmd.u.request.flags=3DATA_CMD_READ;
 +     iocmd.u.request.data=3Dbuff;
 +     iocmd.u.request.count=3D512;
 ++#endif
 +     copydata=3D1;
 +     break;
 +   case READ_THRESHOLDS:
 ++#ifdef IOCATAREQUEST
 ++    request.u.ata.feature=3DATA_SMART_READ_THRESHOLDS;
 ++    request.u.ata.count=3D1;
 ++    request.u.ata.lba=3D1|(0xc24f<<8);
 ++    request.flags=3DATA_CMD_READ;
 ++    request.data=3Dbuff;
 ++    request.count=3D512;
 ++#else
 +     iocmd.u.request.u.ata.feature=3DATA_SMART_READ_THRESHOLDS;
 +     iocmd.u.request.u.ata.count=3D1;
 +     iocmd.u.request.u.ata.lba=3D1|(0xc24f<<8);
 +     iocmd.u.request.flags=3DATA_CMD_READ;
 +     iocmd.u.request.data=3Dbuff;
 +     iocmd.u.request.count=3D512;
 ++#endif
 +     copydata=3D1;
 +     break;
 +   case READ_LOG:
 ++#ifdef IOCATAREQUEST
 ++    request.u.ata.feature=3DATA_SMART_READ_LOG_SECTOR;
 ++    request.u.ata.lba=3Dselect|(0xc24f<<8);
 ++    request.u.ata.count=3D1;
 ++    request.flags=3DATA_CMD_READ;
 ++    request.data=3Dbuff;
 ++    request.count=3D512;
 ++#else
 +     iocmd.u.request.u.ata.feature=3DATA_SMART_READ_LOG_SECTOR;
 +     iocmd.u.request.u.ata.lba=3Dselect|(0xc24f<<8);
 +     iocmd.u.request.u.ata.count=3D1;
 +     iocmd.u.request.flags=3DATA_CMD_READ;
 +     iocmd.u.request.data=3Dbuff;
 +     iocmd.u.request.count=3D512;
 ++#endif
 +     copydata=3D1;
 +     break;
 +   case IDENTIFY:
 ++#ifdef IOCATAREQUEST
 ++    request.u.ata.command=3DATA_IDENTIFY_DEVICE;
 ++    request.flags=3DATA_CMD_READ;
 ++    request.data=3Dbuff;
 ++    request.count=3D512;
 ++#else
 +     iocmd.u.request.u.ata.command=3DATA_IDENTIFY_DEVICE;
 +     iocmd.u.request.flags=3DATA_CMD_READ;
 +     iocmd.u.request.data=3Dbuff;
 +     iocmd.u.request.count=3D512;
 ++#endif
 +     copydata=3D1;
 +     break;
 +   case PIDENTIFY:
 ++#ifdef IOCATAREQUEST
 ++    request.u.ata.command=3DATA_IDENTIFY_PACKET_DEVICE;
 ++    request.flags=3DATA_CMD_READ;
 ++    request.data=3Dbuff;
 ++    request.count=3D512;
 ++#else
 +     iocmd.u.request.u.ata.command=3DATA_IDENTIFY_PACKET_DEVICE;
 +     iocmd.u.request.flags=3DATA_CMD_READ;
 +     iocmd.u.request.data=3Dbuff;
 +     iocmd.u.request.count=3D512;
 ++#endif
 +     copydata=3D1;
 +     break;
 +   case ENABLE:
 ++#ifdef IOCATAREQUEST
 ++    request.u.ata.feature=3DATA_SMART_ENABLE;
 ++    request.u.ata.lba=3D0xc24f<<8;
 ++    request.flags=3DATA_CMD_CONTROL;
 ++#else
 +     iocmd.u.request.u.ata.feature=3DATA_SMART_ENABLE;
 +     iocmd.u.request.u.ata.lba=3D0xc24f<<8;
 +     iocmd.u.request.flags=3DATA_CMD_CONTROL;
 ++#endif
 +     break;
 +   case DISABLE:
 ++#ifdef IOCATAREQUEST
 ++    request.u.ata.feature=3DATA_SMART_DISABLE;
 ++    request.u.ata.lba=3D0xc24f<<8;
 ++    request.flags=3DATA_CMD_CONTROL;
 ++#else
 +     iocmd.u.request.u.ata.feature=3DATA_SMART_DISABLE;
 +     iocmd.u.request.u.ata.lba=3D0xc24f<<8;
 +     iocmd.u.request.flags=3DATA_CMD_CONTROL;
 ++#endif
 +     break;
 +   case AUTO_OFFLINE:
 +     // NOTE: According to ATAPI 4 and UP, this command is obsolete
 ++#ifdef IOCATAREQUEST
 ++    request.u.ata.feature=3DATA_SMART_AUTO_OFFLINE;
 ++    request.u.ata.lba=3Dselect|(0xc24f<<8);
 ++    request.flags=3DATA_CMD_CONTROL;
 ++#else
 +     iocmd.u.request.u.ata.feature=3DATA_SMART_AUTO_OFFLINE;
 +     iocmd.u.request.u.ata.lba=3Dselect|(0xc24f<<8);
 +     iocmd.u.request.flags=3DATA_CMD_CONTROL;
 ++#endif
 +     break;
 +   case AUTOSAVE:
 ++#ifdef IOCATAREQUEST
 ++    request.u.ata.feature=3DATA_SMART_AUTOSAVE;
 ++    request.u.ata.count=3D0xf1;  // to enable autosave
 ++    request.u.ata.lba=3D0xc24f<<8;
 ++    request.flags=3DATA_CMD_CONTROL;
 ++#else
 +     iocmd.u.request.u.ata.feature=3DATA_SMART_AUTOSAVE;
 +     iocmd.u.request.u.ata.count=3D0xf1;  // to enable autosave
 +     iocmd.u.request.u.ata.lba=3D0xc24f<<8;
 +     iocmd.u.request.flags=3DATA_CMD_CONTROL;
 ++#endif
 +     break;
 +   case IMMEDIATE_OFFLINE:
 ++#ifdef IOCATAREQUEST
 ++    request.u.ata.feature=3DATA_SMART_IMMEDIATE_OFFLINE;
 ++    request.u.ata.lba =3D select|(0xc24f<<8); // put test in sector
 ++    request.flags=3DATA_CMD_CONTROL;
 ++#else
 +     iocmd.u.request.u.ata.feature=3DATA_SMART_IMMEDIATE_OFFLINE;
 +     iocmd.u.request.u.ata.lba =3D select|(0xc24f<<8); // put test in sect=
 or
 +     iocmd.u.request.flags=3DATA_CMD_CONTROL;
 ++#endif
 +     break;
 +   case STATUS_CHECK: // same command, no HDIO in FreeBSD
 +   case STATUS:
 +     // this command only says if SMART is working.  It could be
 +     // replaced with STATUS_CHECK below.
 ++#ifdef IOCATAREQUEST
 ++    request.u.ata.feature=3DATA_SMART_STATUS;
 ++    request.u.ata.lba=3D0xc24f<<8;
 ++    request.flags=3DATA_CMD_CONTROL;
 ++#else
 +     iocmd.u.request.u.ata.feature=3DATA_SMART_STATUS;
 +     iocmd.u.request.u.ata.lba=3D0xc24f<<8;
 +     iocmd.u.request.flags=3DATA_CMD_CONTROL;
 ++#endif
 +     break;
 +   default:
 +     pout("Unrecognized command %d in ata_command_interface()\n"
 +@@ -334,15 +439,24 @@
 +     unsigned const char failed_lo=3D0xf4, failed_hi=3D0x2c;
 +     unsigned char low,high;
 +    =20
 ++#ifdef IOCATAREQUEST
 ++    if ((retval=3Dioctl(con->device, IOCATAREQUEST, &request)))
 ++#else
 +     if ((retval=3Dioctl(con->atacommand, IOCATA, &iocmd)))
 ++#endif
 +       return -1;
 +=20
 + #if __FreeBSD_version < 502000
 +     printwarning(NO_RETURN,NULL);
 + #endif
 +=20
 ++#ifdef IOCATAREQUEST
 ++    high =3D (request.u.ata.lba >> 16) & 0xff;
 ++    low =3D (request.u.ata.lba >> 8) & 0xff;
 ++#else
 +     high =3D (iocmd.u.request.u.ata.lba >> 16) & 0xff;
 +     low =3D (iocmd.u.request.u.ata.lba >> 8) & 0xff;
 ++#endif
 +    =20
 +     // Cyl low and Cyl high unchanged means "Good SMART status"
 +     if (low=3D=3Dnormal_lo && high=3D=3Dnormal_hi)
 +@@ -355,6 +469,15 @@
 +     // We haven't gotten output that makes sense; print out some debuggin=
 g info
 +     char buf[512];
 +     sprintf(buf,"CMD=3D0x%02x\nFR =3D0x%02x\nNS =3D0x%02x\nSC =3D0x%02x\n=
 CL =3D0x%02x\nCH =3D0x%02x\nRETURN =3D0x%04x\n",
 ++#ifdef IOCATAREQUEST
 ++            (int)request.u.ata.command,
 ++            (int)request.u.ata.feature,
 ++            (int)request.u.ata.count,
 ++            (int)((request.u.ata.lba) & 0xff),
 ++            (int)((request.u.ata.lba>>8) & 0xff),
 ++            (int)((request.u.ata.lba>>16) & 0xff),
 ++            (int)request.error);
 ++#else
 +             (int)iocmd.u.request.u.ata.command,
 +             (int)iocmd.u.request.u.ata.feature,
 +             (int)iocmd.u.request.u.ata.count,
 +@@ -362,11 +485,16 @@
 +             (int)((iocmd.u.request.u.ata.lba>>8) & 0xff),
 +             (int)((iocmd.u.request.u.ata.lba>>16) & 0xff),
 +             (int)iocmd.u.request.error);
 ++#endif
 +     printwarning(BAD_SMART,buf);
 +     return 0;  =20
 +   }
 +=20
 ++#ifdef IOCATAREQUEST
 ++  if ((retval=3Dioctl(con->device, IOCATAREQUEST, &request))) {
 ++#else
 +   if ((retval=3Dioctl(con->atacommand, IOCATA, &iocmd))) {
 ++#endif
 +     perror("Failed command: ");
 +     return -1;
 +   }
 +@@ -637,7 +765,11 @@
 +   }
 +=20
 +   // Now send the command down through an ioctl()
 ++#ifdef IOCATAREQUEST
 ++  ioctlreturn=3Dioctl(con->device,TWEIO_COMMAND,cmd);
 ++#else
 +   ioctlreturn=3Dioctl(con->atacommand,TWEIO_COMMAND,cmd);
 ++#endif
 +  =20
 +   // Deal with the different error cases
 +   if (ioctlreturn) {
 +@@ -709,6 +841,7 @@
 +   return 0;
 + }
 +=20
 ++#ifndef IOCATAREQUEST
 + static int get_ata_channel_unit ( const char* name, int* unit, int* dev) {
 + #ifndef ATAREQUEST
 +   *dev=3D0;
 +@@ -756,7 +889,7 @@
 +     return 0;
 + #endif
 + }
 +-
 ++#endif
 +=20
 + // Guess device type (ata or scsi) based on device name (FreeBSD
 + // specific) SCSI device name in FreeBSD can be sd, sr, scd, st, nst,
 +@@ -788,11 +921,13 @@
 +   // form /dev/ad* or ad*
 +   if (!strncmp(fbsd_dev_ata_disk_prefix, dev_name,
 +                strlen(fbsd_dev_ata_disk_prefix))) {
 ++#ifndef IOCATAREQUEST
 +     if (chan !=3D NULL) {
 +       if (get_ata_channel_unit(dev_name,&(chan->channel),&(chan->device))=
 <0) {
 +-        return CONTROLLER_UNKNOWN;
 ++	return CONTROLLER_UNKNOWN;
 +       }
 +     }
 ++#endif
 +     return CONTROLLER_ATA;
 +   }
 +  =20
 
 --Multipart=_Mon__23_May_2005_18_53_39_+0200_CXCtUQkhcsF5RiC+--


Adding to audit trail from misfiled PR ports/81404:

Date: Mon, 23 May 2005 15:29:17 +0200
From: =?ISO-8859-1?Q?S=F8ren_Schmidt?= <sos@FreeBSD.ORG>
 
 I tried mailing the maintainer but has gotten no reply. the below  
 hack makes it work, feel free to hack and commit, as I dont have the  
 time...
 
 
 --Apple-Mail-1--1038679942
 Content-Transfer-Encoding: 7bit
 Content-Type: application/octet-stream;
 	x-unix-mode=0644;
 	name="smartmontools-patch"
 Content-Disposition: attachment;
 	filename=smartmontools-patch
 
 --- os_freebsd.c.orig	Sun Sep  5 09:16:07 2004
 +++ os_freebsd.c	Fri May 20 12:42:36 2005
 @@ -18,6 +18,7 @@
  #include <stdio.h>
  #include <sys/types.h>
  #include <dirent.h>
 +#include <fcntl.h>
  #include <err.h>
  #include <camlib.h>
  #include <cam/scsi/scsi_message.h>
 @@ -109,7 +110,7 @@
    }
  
    if (parse_ok == CONTROLLER_ATA) {
 -    if ((fdchan->atacommand = open("/dev/ata",O_RDWR))<0) {
 +    if ((fdchan->atadevice = open(dev,O_RDONLY))<0) {
        int myerror = errno;      //preserve across free call
        free (fdchan);
        errno = myerror;
 @@ -120,7 +121,7 @@
    if (parse_ok == CONTROLLER_3WARE_678K_CHAR) {
      char buf[512];
      sprintf(buf,"/dev/twe%d",fdchan->device);
 -    if ((fdchan->atacommand = open(buf,O_RDWR))<0) {
 +    if ((fdchan->atadevice = open(buf,O_RDWR))<0) {
        int myerror = errno; // preserver across free call
        free(fdchan);
        errno=myerror;
 @@ -167,8 +168,8 @@
      free(fdchan->devname);
    
    // close device, if open
 -  if (fdchan->atacommand)
 -    failed=close(fdchan->atacommand);
 +  if (fdchan->atadevice)
 +    failed=close(fdchan->atadevice);
  
    if (fdchan->scsicontrol)
      failed=close(fdchan->scsicontrol);
 @@ -221,7 +222,7 @@
  }
  
  int ata_command_interface(int fd, smart_command_set command, int select, char *data) {
 -#ifndef ATAREQUEST
 +#ifndef IOCATAREQUEST
    // sorry, but without ATAng, we can't do anything here
    printwarning(BAD_KERNEL,NULL);
    errno = ENOSYS;
 @@ -229,7 +230,7 @@
  #else
    struct freebsd_dev_channel* con;
    int retval, copydata=0;
 -  struct ata_cmd iocmd;
 +  struct ata_ioc_request request;
    unsigned char buff[512];
  
    // check that "file descriptor" is valid
 @@ -238,89 +239,86 @@
  
    bzero(buff,512);
  
 -  bzero(&iocmd,sizeof(struct ata_cmd));
 +  bzero(&request,sizeof(struct ata_ioc_request));
    bzero(buff,512);
 -  iocmd.cmd=ATAREQUEST;
 -  iocmd.channel=con->channel;
 -  iocmd.device=con->device;
  
 -  iocmd.u.request.u.ata.command=ATA_SMART_CMD;
 -  iocmd.u.request.timeout=600;
 +  request.u.ata.command=ATA_SMART_CMD;
 +  request.timeout=600;
    switch (command){
    case READ_VALUES:
 -    iocmd.u.request.u.ata.feature=ATA_SMART_READ_VALUES;
 -    iocmd.u.request.u.ata.lba=0xc24f<<8;
 -    iocmd.u.request.flags=ATA_CMD_READ;
 -    iocmd.u.request.data=buff;
 -    iocmd.u.request.count=512;
 +    request.u.ata.feature=ATA_SMART_READ_VALUES;
 +    request.u.ata.lba=0xc24f<<8;
 +    request.flags=ATA_CMD_READ;
 +    request.data=buff;
 +    request.count=512;
      copydata=1;
      break;
    case READ_THRESHOLDS:
 -    iocmd.u.request.u.ata.feature=ATA_SMART_READ_THRESHOLDS;
 -    iocmd.u.request.u.ata.count=1;
 -    iocmd.u.request.u.ata.lba=1|(0xc24f<<8);
 -    iocmd.u.request.flags=ATA_CMD_READ;
 -    iocmd.u.request.data=buff;
 -    iocmd.u.request.count=512;
 +    request.u.ata.feature=ATA_SMART_READ_THRESHOLDS;
 +    request.u.ata.count=1;
 +    request.u.ata.lba=1|(0xc24f<<8);
 +    request.flags=ATA_CMD_READ;
 +    request.data=buff;
 +    request.count=512;
      copydata=1;
      break;
    case READ_LOG:
 -    iocmd.u.request.u.ata.feature=ATA_SMART_READ_LOG_SECTOR;
 -    iocmd.u.request.u.ata.lba=select|(0xc24f<<8);
 -    iocmd.u.request.u.ata.count=1;
 -    iocmd.u.request.flags=ATA_CMD_READ;
 -    iocmd.u.request.data=buff;
 -    iocmd.u.request.count=512;
 +    request.u.ata.feature=ATA_SMART_READ_LOG_SECTOR;
 +    request.u.ata.lba=select|(0xc24f<<8);
 +    request.u.ata.count=1;
 +    request.flags=ATA_CMD_READ;
 +    request.data=buff;
 +    request.count=512;
      copydata=1;
      break;
    case IDENTIFY:
 -    iocmd.u.request.u.ata.command=ATA_IDENTIFY_DEVICE;
 -    iocmd.u.request.flags=ATA_CMD_READ;
 -    iocmd.u.request.data=buff;
 -    iocmd.u.request.count=512;
 +    request.u.ata.command=ATA_IDENTIFY_DEVICE;
 +    request.flags=ATA_CMD_READ;
 +    request.data=buff;
 +    request.count=512;
      copydata=1;
      break;
    case PIDENTIFY:
 -    iocmd.u.request.u.ata.command=ATA_IDENTIFY_PACKET_DEVICE;
 -    iocmd.u.request.flags=ATA_CMD_READ;
 -    iocmd.u.request.data=buff;
 -    iocmd.u.request.count=512;
 +    request.u.ata.command=ATA_IDENTIFY_PACKET_DEVICE;
 +    request.flags=ATA_CMD_READ;
 +    request.data=buff;
 +    request.count=512;
      copydata=1;
      break;
    case ENABLE:
 -    iocmd.u.request.u.ata.feature=ATA_SMART_ENABLE;
 -    iocmd.u.request.u.ata.lba=0xc24f<<8;
 -    iocmd.u.request.flags=ATA_CMD_CONTROL;
 +    request.u.ata.feature=ATA_SMART_ENABLE;
 +    request.u.ata.lba=0xc24f<<8;
 +    request.flags=ATA_CMD_CONTROL;
      break;
    case DISABLE:
 -    iocmd.u.request.u.ata.feature=ATA_SMART_DISABLE;
 -    iocmd.u.request.u.ata.lba=0xc24f<<8;
 -    iocmd.u.request.flags=ATA_CMD_CONTROL;
 +    request.u.ata.feature=ATA_SMART_DISABLE;
 +    request.u.ata.lba=0xc24f<<8;
 +    request.flags=ATA_CMD_CONTROL;
      break;
    case AUTO_OFFLINE:
      // NOTE: According to ATAPI 4 and UP, this command is obsolete
 -    iocmd.u.request.u.ata.feature=ATA_SMART_AUTO_OFFLINE;
 -    iocmd.u.request.u.ata.lba=select|(0xc24f<<8);
 -    iocmd.u.request.flags=ATA_CMD_CONTROL;
 +    request.u.ata.feature=ATA_SMART_AUTO_OFFLINE;
 +    request.u.ata.lba=select|(0xc24f<<8);
 +    request.flags=ATA_CMD_CONTROL;
      break;
    case AUTOSAVE:
 -    iocmd.u.request.u.ata.feature=ATA_SMART_AUTOSAVE;
 -    iocmd.u.request.u.ata.count=0xf1;  // to enable autosave
 -    iocmd.u.request.u.ata.lba=0xc24f<<8;
 -    iocmd.u.request.flags=ATA_CMD_CONTROL;
 +    request.u.ata.feature=ATA_SMART_AUTOSAVE;
 +    request.u.ata.count=0xf1;  // to enable autosave
 +    request.u.ata.lba=0xc24f<<8;
 +    request.flags=ATA_CMD_CONTROL;
      break;
    case IMMEDIATE_OFFLINE:
 -    iocmd.u.request.u.ata.feature=ATA_SMART_IMMEDIATE_OFFLINE;
 -    iocmd.u.request.u.ata.lba = select|(0xc24f<<8); // put test in sector
 -    iocmd.u.request.flags=ATA_CMD_CONTROL;
 +    request.u.ata.feature=ATA_SMART_IMMEDIATE_OFFLINE;
 +    request.u.ata.lba = select|(0xc24f<<8); // put test in sector
 +    request.flags=ATA_CMD_CONTROL;
      break;
    case STATUS_CHECK: // same command, no HDIO in FreeBSD
    case STATUS:
      // this command only says if SMART is working.  It could be
      // replaced with STATUS_CHECK below.
 -    iocmd.u.request.u.ata.feature=ATA_SMART_STATUS;
 -    iocmd.u.request.u.ata.lba=0xc24f<<8;
 -    iocmd.u.request.flags=ATA_CMD_CONTROL;
 +    request.u.ata.feature=ATA_SMART_STATUS;
 +    request.u.ata.lba=0xc24f<<8;
 +    request.flags=ATA_CMD_CONTROL;
      break;
    default:
      pout("Unrecognized command %d in ata_command_interface()\n"
 @@ -334,15 +332,15 @@
      unsigned const char failed_lo=0xf4, failed_hi=0x2c;
      unsigned char low,high;
      
 -    if ((retval=ioctl(con->atacommand, IOCATA, &iocmd)))
 +    if ((retval=ioctl(con->atadevice, IOCATAREQUEST, &request)))
        return -1;
  
  #if __FreeBSD_version < 502000
      printwarning(NO_RETURN,NULL);
  #endif
  
 -    high = (iocmd.u.request.u.ata.lba >> 16) & 0xff;
 -    low = (iocmd.u.request.u.ata.lba >> 8) & 0xff;
 +    high = (request.u.ata.lba >> 16) & 0xff;
 +    low = (request.u.ata.lba >> 8) & 0xff;
      
      // Cyl low and Cyl high unchanged means "Good SMART status"
      if (low==normal_lo && high==normal_hi)
 @@ -355,18 +353,18 @@
      // We haven't gotten output that makes sense; print out some debugging info
      char buf[512];
      sprintf(buf,"CMD=0x%02x\nFR =0x%02x\nNS =0x%02x\nSC =0x%02x\nCL =0x%02x\nCH =0x%02x\nRETURN =0x%04x\n",
 -            (int)iocmd.u.request.u.ata.command,
 -            (int)iocmd.u.request.u.ata.feature,
 -            (int)iocmd.u.request.u.ata.count,
 -            (int)((iocmd.u.request.u.ata.lba) & 0xff),
 -            (int)((iocmd.u.request.u.ata.lba>>8) & 0xff),
 -            (int)((iocmd.u.request.u.ata.lba>>16) & 0xff),
 -            (int)iocmd.u.request.error);
 +            (int)request.u.ata.command,
 +            (int)request.u.ata.feature,
 +            (int)request.u.ata.count,
 +            (int)((request.u.ata.lba) & 0xff),
 +            (int)((request.u.ata.lba>>8) & 0xff),
 +            (int)((request.u.ata.lba>>16) & 0xff),
 +            (int)request.error);
      printwarning(BAD_SMART,buf);
      return 0;   
    }
  
 -  if ((retval=ioctl(con->atacommand, IOCATA, &iocmd))) {
 +  if ((retval=ioctl(con->atadevice, IOCATAREQUEST, &request))) {
      perror("Failed command: ");
      return -1;
    }
 @@ -637,7 +635,7 @@
    }
  
    // Now send the command down through an ioctl()
 -  ioctlreturn=ioctl(con->atacommand,TWEIO_COMMAND,cmd);
 +  ioctlreturn=ioctl(con->atadevice,TWEIO_COMMAND,cmd);
    
    // Deal with the different error cases
    if (ioctlreturn) {
 @@ -709,55 +707,6 @@
    return 0;
  }
  
 -static int get_ata_channel_unit ( const char* name, int* unit, int* dev) {
 -#ifndef ATAREQUEST
 -  *dev=0;
 -  *unit=0;
 -return 0;
 -#else
 -  // there is no direct correlation between name 'ad0, ad1, ...' and
 -  // channel/unit number.  So we need to iterate through the possible
 -  // channels and check each unit to see if we match names
 -  struct ata_cmd iocmd;
 -  int fd,maxunit;
 -  
 -  bzero(&iocmd, sizeof(struct ata_cmd));
 -
 -  if ((fd = open("/dev/ata", O_RDWR)) < 0)
 -    return -errno;
 -  
 -  iocmd.cmd = ATAGMAXCHANNEL;
 -  if (ioctl(fd, IOCATA, &iocmd) < 0) {
 -    return -errno;
 -    close(fd);
 -  }
 -  maxunit = iocmd.u.maxchan;
 -  for (*unit = 0; *unit < maxunit; (*unit)++) {
 -    iocmd.channel = *unit;
 -    iocmd.device = -1;
 -    iocmd.cmd = ATAGPARM;
 -    if (ioctl(fd, IOCATA, &iocmd) < 0) {
 -      close(fd);
 -      return -errno;
 -    }
 -    if (iocmd.u.param.type[0] && !strcmp(name,iocmd.u.param.name[0])) {
 -      *dev = 0;
 -      break;
 -    }
 -    if (iocmd.u.param.type[1] && !strcmp(name,iocmd.u.param.name[1])) {
 -      *dev = 1;
 -      break;
 -    }
 -  }
 -  close(fd);
 -  if (*unit == maxunit)
 -    return -1;
 -  else
 -    return 0;
 -#endif
 -}
 -
 -
  // Guess device type (ata or scsi) based on device name (FreeBSD
  // specific) SCSI device name in FreeBSD can be sd, sr, scd, st, nst,
  // osst, nosst and sg.
 @@ -788,11 +737,6 @@
    // form /dev/ad* or ad*
    if (!strncmp(fbsd_dev_ata_disk_prefix, dev_name,
                 strlen(fbsd_dev_ata_disk_prefix))) {
 -    if (chan != NULL) {
 -      if (get_ata_channel_unit(dev_name,&(chan->channel),&(chan->device))<0) {
 -        return CONTROLLER_UNKNOWN;
 -      }
 -    }
      return CONTROLLER_ATA;
    }
    
 
 --Apple-Mail-1--1038679942
 Content-Transfer-Encoding: quoted-printable
 Content-Type: text/plain;
 	charset=ISO-8859-1;
 	format=flowed
 
 
 - S=F8ren
 
 
 
 
 --Apple-Mail-1--1038679942--


From: Eduard Martinescu <martines@rochester.rr.com>
To: Oliver Lehmann <lehmann@ans-netz.de>
Cc: bug-followup@FreeBSD.org, sos@FreeBSD.org
Subject: Re: ports/81403: smartmontools is malfunctioning on FreeBSD > 600027
Date: Tue, 24 May 2005 20:02:21 -0400

 I approve.  I will also include this patch in the upstream source for 
 smartmontools.
 
 Thanks!
 Ed
 
 Oliver Lehmann wrote:
 > I included the wrong (original) patch. Please find the correct one
 > attached
 > 
State-Changed-From-To: feedback->closed 
State-Changed-By: oliver 
State-Changed-When: Wed May 25 01:16:05 GMT 2005 
State-Changed-Why:  
fix committed 

http://www.freebsd.org/cgi/query-pr.cgi?pr=81403 
>Unformatted:
